LoginSignup
0
0

More than 1 year has passed since last update.

MySQLの設定を簡略化するために、SpringBootにDockerを導入する  CodeSpaces上でも動くことを確認

Last updated at Posted at 2023-02-21

概要

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ファイルを作成する

Dockerfile

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コマンドを実行してビルドされていることを確認する。

command
>docker images
REPOSITORY              TAG       IMAGE ID       CREATED              SIZE
springboot-ecshop-api   latest    a0a584839f65   About a minute ago   499MB

docker-compose.ymlファイルを作成する

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

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

デバッグで処理を追うときにはローカルを使う

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のターミナルで以下コマンドを実行する

command
springboot-ecshop-rest-api > mvn package

targetフォルダが作成されます。

command
springboot-ecshop-rest-api > docker-compose up -d build

1分ぐらい待って
ttp://localhost:5000/api/products?pageNo=2&pageSize=4&category=1
にアクセス

結果(下画像) 動いてます。
image.png

SpringBootのログを表示するコマンド(dockerなしで実行するとアスキーアートが出てくるあれ)

command
springboot-ecshop-rest-api > docker logs -f springboot-ecshop-api

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.7.5)

を開く

2.CodeSpace(ブラウザ版)

下の図のようにCodeボタンを押し、+ボタンを押してCodeSpacesを新規作成します。
image.png

開けた時の様子
image.png

起動後ブランチを11.MySqlWithDockerに切り替える。

以下コマンドを実行する

command
mvn package

targetフォルダ作成後される。
以下コンテナを実行してDockerコンテナを起動(dockerは自動的にインストールされるみたいですね。)

docker-compose up -d --build

port番号5000のURLを開き、URLの末尾にパラメータを加える
/api/products?pageNo=2&pageSize=4&category=1

ブラウザでGETメソッドを取得することを確認。(下画像)
ただしURLがグッチャグチャなんでフロントエンドとの連携は難しそう
image.png

MySQLとの連携ができていると確認できます。

3.CodeSpace(ローカルのVSCodeで開く)

VSCode経由でCodeSpacesを起動します。(下画像参照)
image.png

ttp://localhost:5000/api/products?pageNo=2&pageSize=4&category=1
にアクセス(下画像)
image.png

MySQLとの連携ができていると確認できます。
ブラウザ版と違ってURLがきれいなのが良いですね。

参考

良かったらgithubアカウント持っている方は試してみてください
https://github.com/RYA234/springboot-ecshop-rest-api

Section26: Docker-compose docker-composeの大まかな作り方

mysqlに初期データを持たせる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0