https://github.com/devlights/vscode-docker-java11env-springboot
(VSCode + Remote Container) + Docker + JDK11 + SpringBoot
https://github.com/devlights/vscode-docker-java11env-springboot
Last synced: about 2 months ago
JSON representation
(VSCode + Remote Container) + Docker + JDK11 + SpringBoot
- Host: GitHub
- URL: https://github.com/devlights/vscode-docker-java11env-springboot
- Owner: devlights
- License: mit
- Created: 2021-10-28T07:31:01.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2021-10-28T07:32:50.000Z (over 3 years ago)
- Last Synced: 2025-02-12T08:58:27.320Z (4 months ago)
- Language: Dockerfile
- Size: 63.5 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# はじめに
VSCode上で Remote Container を使い、SpringBootアプリを開発して
ステージ用の tomcat と springboot コンテナでも起動するように調整する。
(デバッグは、VSCodeでデバッグ起動して行う)作業を行うエンジニアのローカルには java がインストールされている必要はない。
以下のものだけインストールされていれば良い。
- VSCode
- Dockerまず、以下の作業からスタート
- VSCodeで本ディレクトリを開く
- コマンドパレットで "reopen in container" を実行# SpringBoot プロジェクト作成
```sh
$ spring init --dependencies=web demo
```# resouces/application.properties を更新
```
server.servlet.context-path=/demo
```# DemoApplication.java を更新
- War起動時に呼び出されるように SpringBootServletInitializer を継承
```java
package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(DemoApplication.class);
}
}
```# HelloControllerを作成
```java
package com.example.demo;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@RequestMapping(path = "/hello")
public String home() {
return "helloworld";
}
}
```# VSCode 上で SpringBoot を起動してデバッグ
ここまでの調整で、VSCode 上で F5 または SPRING BOOT DASHBOARD よりデバッグ起動できるようになっている。
起動したら ```localhost:8080/demo/hello/``` で出力が表示されることを確認出来る。
# pom.xml を war 出力用に調整
- packaging を切替可能に
- spring-boot-starter-tomcat を dependency に追加
- scope を切替可能に
- build を調整```xml
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.5.6
com.example
demo
0.0.1-SNAPSHOT
demo
Demo project for Spring Boot
${packaging.type}
debug
true
jar
release
war
provided
8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
${tomcat.provided}
org.springframework.boot
spring-boot-starter-test
test
${project.artifactId}
org.springframework.boot
spring-boot-maven-plugin
org.apache.maven.plugins
maven-compiler-plugin
${java.version}
${java.version}
```
# jar ファイル作成
```sh
$ (cd demo && mvn clean package -Pdebug)
```以下で、SpringBootをtomcat内蔵版で起動
```sh
$ java -jar demo/target/demo.jar
```# SpringBoot コンテナ用の Dockerfile 作成
```docker
FROM adoptopenjdk/openjdk11:alpine-slimWORKDIR /app
COPY ./demo/target/demo.jar /appENTRYPOINT [ "java", "-jar", "/app/demo.jar" ]
CMD [ "sleep", "infinity" ]
```## Docker イメージビルド
```sh
$ docker image build -t stage-springboot -f Dockerfile.springboot ${PWD}
```## Docker コンテナ起動
```sh
$ docker container run -dit -p 8082:8080 --rm --name stage-springboot-demo stage-springboot
```## Docker コンテナ停止
```sh
$ docker container stop stage-springboot-demo
```# war ファイル作成
```sh
$ (cd demo && mvn clean package -Prelease)
```# Tomcat コンテナ用の Dockerfile 作成
```docker
# tomcat 8
#FROM tomcat:8-jdk11-temurin# tomcat 9
FROM tomcat:9-jdk11-temurin# tomcat 10
# tomcat10 で SpringBoot は現状動かない
# - https://github.com/spring-projects/spring-boot/issues/22414
#FROM tomcat:jdk11-temurinWORKDIR /usr/local/tomcat/webapps/
COPY ./demo/target/demo.war /usr/local/tomcat/webapps/
```## Docker イメージビルド
```sh
$ docker image build -t stage-tomcat -f Dockerfile.tomcat ${PWD}
```## Docker コンテナ起動
```sh
$ docker container run -dit -p 8081:8080 --rm --name stage-tomcat-demo stage-tomcat
```## Docker コンテナ停止
```sh
$ docker container stop stage-tomcat-demo
```# 作業しやすいように Makefile を用意
```makefile
build:
(cd demo && mvn package -Pdebug -DskipTests=true && mvn package -Prelease -DskipTests=true)
docker image build -t stage-tomcat -f Dockerfile.tomcat ${PWD}
docker image build -t stage-springboot -f Dockerfile.springboot ${PWD}clean:
(cd demo && mvn clean)start-tomcat:
docker container run -dit -p 8081:8080 --rm --name stage-tomcat-demo stage-tomcat
@echo "Launch webapp: http://localhost:8081/demo/hello/"stop-tomcat:
docker container stop stage-tomcat-demostart-springboot:
docker container run -dit -p 8082:8080 --rm --name stage-springboot-demo stage-springboot
@echo "Launch webapp: http://localhost:8082/demo/hello/"stop-springboot:
docker container stop stage-springboot-demo
```- clean ターゲット
- ビルド生成物削除 (Jar and War)
- build ターゲット
- jar作成
- war作成
- tomcat dockerイメージ作成
- springboot dockerイメージ作成
- start-tomcat ターゲット
- tomcat dockerイメージからコンテナ起動
- 8081で起動
- stop-tomcat ターゲット
- tomcat コンテナを停止 (同時にコンテナ削除)
- start-springboot ターゲット
- springboot dockerイメージからコンテナ起動
- 8082で起動
- stop-springboot ターゲット
- springboot コンテナを停止(同時にコンテナ削除)```sh
$ make clean
$ make build
$ make start-tomcat
$ make stop-tomcat
$ make start-springboot
$ make stop-tomcat
```# 参考情報
- https://www.saka-en.com/java/spring-boot-war-tomcat/
- https://qiita.com/YumaInaura/items/1647e509f83462a37494
- https://qiita.com/rockbirds12/items/13aebcb33214c0bd4d4b
- https://stackoverflow.com/questions/52628246/spring-boot-web-app-not-running-on-tomcat-9
- https://qiita.com/bokuwakuma/items/04c0d82b6abfa334fce9
- https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html
- https://github.com/spring-projects/spring-boot/issues/22414