概要
SpringBootにDockerを導入します。
dockerを導入する理由
MySQLの設定をしないで動かせるようにしたいため。
第三者が行うセッティングを減らすため
開発環境
OS:windows10
バックエンド側:
IDE:IntelliJ Community
spring-boot-starter-parent 2.75
java : 11
データベース
mysql:8.0.29
クライアントソフト: MySQL Workbench
Docker:20.10.22
手順
今回作成したファイル一覧
ファイル名 | 説明 |
---|---|
application.properties | 従来のプロパティファイル spring.profiles.active=dockerでdockerに切り替える |
application-docker.properties | docker用のプロパティファイル |
Dockerfile | SpringBoot Applicationのイメージファイル |
docker-compose.yml | バックエンドアプリケーション、MySQLをDockerのコンテナで起動するためのファイル |
mysql/*.sql | データベースの初期データが入っているフォルダ。拡張子sqlのファイルはMySQL WorkBenchで作成 |
Docker Desktopをインストール
以下リンクからインストール
コマンドを実行できるか確認
docker -v
Docker version 20.10.22, build 3a2c30b
Dockerファイルを作成する
FROM eclipse-temurin:11
WORKDIR /app
COPY target/springboot-ecshop-rest-api-0.0.1-SNAPSHOT.jar /app/springboot-ecshop-api.jar
ENTRYPOINT ["java","-jar","springboot-ecshop-api.jar"]
docker imageコマンドを実行してビルドされていることを確認する。
>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
springboot-ecshop-api latest a0a584839f65 About a minute ago 499MB
docker-compose.ymlファイルを作成する
version: "3.8"
services:
mysqldb:
container_name: mysqldb
image: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: ecshopdb
networks:
springboot-mysql-net:
# MYSQLの初期データを設定
volumes:
- ./mysql/:/docker-entrypoint-initdb.d/
# 以下コマンドを実行してspringboot-ecshop-api.jarを最新にしておくこと
# mvn clean package
springboot-ecshop-api:
container_name: springboot-ecshop-api
build:
context: ./
dockerfile: Dockerfile
ports:
- "5000:5000"
depends_on:
- mysqldb
networks:
springboot-mysql-net:
restart: on-failure
networks:
springboot-mysql-net:
application-docker.properties
server.port=5000
spring.datasource.url=jdbc:mysql://mysqldb:3306/ecshopdb
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update
application.properties
デバッグで処理を追うときにはローカルを使う
server.port=5000
#MySQL
spring.datasource.url=jdbc:mysql://localhost:3306/ecshopdb
spring.datasource.username=admin
spring.datasource.password=root1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
logging.level.org.springframework.security=DEBUG
app.jwt-secret = JWTSecretKey
app.jwt-expiration-milliseconds = 6048000
spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER
+ # dockerで動かしたい場合コメントアウトしてください
+ # コメントアウト後以下コマンドをターミナル上で実行して.jarファイルを更新
+ # mvn clean package
+ spring.profiles.active=docker
実際に動くか確認
結論
方法 | 結果 |
---|---|
1.ローカルIntelliJ | ○ |
2.CodeSpacesブラウザから | ○ |
3.CodeSpaces VSCodeから | ○ |
CodeSpacesでも試した所動きました。良い意味で想定外です。
dockerとクラウドIDEが合わさると最強の開発環境に見える
1.ローカルのデスクトップアプリケーション(IntelliJ Community)で動くか確認
intelliJのターミナルで以下コマンドを実行する
springboot-ecshop-rest-api > mvn package
targetフォルダが作成されます。
springboot-ecshop-rest-api > docker-compose up -d build
1分ぐらい待って
ttp://localhost:5000/api/products?pageNo=2&pageSize=4&category=1
にアクセス
SpringBootのログを表示するコマンド(dockerなしで実行するとアスキーアートが出てくるあれ)
springboot-ecshop-rest-api > docker logs -f springboot-ecshop-api
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.5)
を開く
2.CodeSpace(ブラウザ版)
下の図のようにCodeボタンを押し、+ボタンを押してCodeSpacesを新規作成します。
起動後ブランチを11.MySqlWithDockerに切り替える。
以下コマンドを実行する
mvn package
targetフォルダ作成後される。
以下コンテナを実行してDockerコンテナを起動(dockerは自動的にインストールされるみたいですね。)
docker-compose up -d --build
port番号5000のURLを開き、URLの末尾にパラメータを加える
/api/products?pageNo=2&pageSize=4&category=1
ブラウザでGETメソッドを取得することを確認。(下画像)
ただしURLがグッチャグチャなんでフロントエンドとの連携は難しそう
MySQLとの連携ができていると確認できます。
3.CodeSpace(ローカルのVSCodeで開く)
VSCode経由でCodeSpacesを起動します。(下画像参照)
ttp://localhost:5000/api/products?pageNo=2&pageSize=4&category=1
にアクセス(下画像)
MySQLとの連携ができていると確認できます。
ブラウザ版と違ってURLがきれいなのが良いですね。
参考
良かったらgithubアカウント持っている方は試してみてください
https://github.com/RYA234/springboot-ecshop-rest-api
Section26: Docker-compose docker-composeの大まかな作り方
mysqlに初期データを持たせる。