Docker × SpringBoot × MySQL 環境構築

# Docker,SpringBoot,MySQLを使用した開発環境の構築

参考にしたサイトはページの一番下にまとめております。

### 個人環境
- macOS Monterey / バージョン12.0.1
- Spring Boot 2.7.7
- IDE Eclipse
- openJDK11
- Maven3.8.6
- MySQL8.0.31
- Docker Desktop 4.15.0

### プロジェクト構成
![ファイル構成.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043250/2b8036a0-60fa-f80a-b2ad-9c570ee244b5.jpeg)

***
### 手順
* docker desktopインストール

* ワークスペース、MySQLフォルダ、settingフォルダ、各ファイルの作成（プロジェクト構成を参照）  

~~~docker-compose.yaml
version: "3"                           //このcomposeファイルの書式バージョン
services:                              //サービスを定義する項目
  spring-boot:
    build:
      context: ./docker-practice       //カレントディレクトリから相対パスで表記
      dockerfile: Dockerfile           
    ports:
      - "8080:8080"                    //ポート番号 ホスト：コンテナ
    depends_on:
      mysql:
        condition: service_started
    entrypoint: "java -jar /ファイル名/ファイル名.jar"
    networks:
      - app-net
  mysql:
    build:
      context: ./mysql                 //カレントディレクトリから相対パスで表記
      dockerfile: Dockerfile
    ports:
      - "3306:3306"                    //MySQLのポート番号　ホスト：コンテナ
    volumes:
      - ./mysql/data/:/var/lib/mysql/  //データ永続化のため,ホスト：コンテナのパスを指定
    environment:
      MYSQL_DATABASE: データベース名
      MYSQL_ROOT_PASSWORD: パスワード
    networks:
      - app-net
networks:
  app-net:
    driver: bridge
~~~

* settingフォルダ直下に配置
~~~setting.cnf
[mysqld]
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4
~~~

* Dockerファイルの作成
:::note warn
Dockerfileの「f」は小文字
拡張子なしで作成
:::
#### Dockerfile（Springプロジェクト直下）
~~~Dockerfile
FROM maven:3.8.6-jdk-11 AS builder
WORKDIR /tmp
COPY ./src ./src
COPY ./pom.xml .
RUN mvn package
FROM openjdk:11
COPY --from=builder /tmp/target/ファイル名.jar /ファイル名/ファイル名.jar
EXPOSE 8080
~~~
#### Dockerfile（MySQLフォルダ直下）
~~~Dockerfile
FROM mysql:8.0.31

EXPOSE 3306
~~~

自分の開発環境に合わせてプロジェクトを作成（Spring Initiarizr使用）
今回は「docker-practice」という名前で作成しています
Spring initializr : https://start.spring.io/

* pom.xml、application.propertiesの編集
~~~pom.xml
<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
		<finalName>ファイル名</finalName>     //jarファイル名と合わせるために追加
	</build>
~~~

~~~application.properties
spring.datasource.url=jdbc:mysql://mysql:3306/データベース名
spring.datasource.username=データベースユーザー名
spring.datasource.password=パスワード
spring.jpa.hibernate.ddl-auto=update
~~~

* 動作確認
　workspaceのあるディレクトリまで移動し、下記コマンド実行
~~~
sudo docker-compose up -d
~~~ 

***
### 遭遇したエラー
* MySQLのバージョンを5から8に更新したところ、docker上で起動した際5のままであった
→MySQLサーバーの再起動が必要
~~~
//サーバーの停止コマンド
mysql.server stop

//サーバーの再起動コマンド
mysql.server start
~~~ 
* 下記エラーメッセージが出現
~~~
java: class file has wrong version,数値 should be 数値
~~~
　→SpringBootとJDKのバージョンが合っていない

### 参考
* Docker desktop　インストール
https://hub.docker.com/
* フォルダ,ファイル構成
https://qiita.com/daisuke30x/items/a3ea62ff8fa582b2b065
https://qiita.com/takuch/items/e5ab6e51b2be0743abc8
* MySQLエラー解消
https://qiita.com/banaoh/items/1eb5dc6c4805a4490e08
* SpringBootとJDKバージョンについて
https://docs.spring.io/spring-framework/docs/5.3.24/reference/html/overview.html#overview
https://stackoverflow.com/questions/74648576/java-class-file-has-wrong-version-61-0-should-be-55-0/74714149