DockerでSpring+MySQLの環境を構築してみる(Windows)

開発環境

  • OS:Windows11
  • Docker Desktopインストール済み
  • VSCodeインストール済み

アプリケーションの定義ファイル(YAML)作成

type nul > docker-compose.yml

下記の内容で編集。

services:
  app:
    build: .
    ports:
      - "8080:8080"
    command: mvn spring-boot:run
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/odaneko
      SPRING_DATASOURCE_USERNAME: odaneko
      SPRING_DATASOURCE_PASSWORD: odaneko

  db:
    image: mysql:8.4
    environment:
      MYSQL_ROOT_PASSWORD: odaneko
      MYSQL_DATABASE: odaneko
      MYSQL_USER: odaneko
      MYSQL_PASSWORD: odaneko
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:

Dockerファイル作成

type nul > Dockerfile

下記の内容で編集。

FROM maven:3.9-eclipse-temurin-21 AS build

WORKDIR /app

COPY pom.xml .
COPY src ./src

RUN mvn clean package -DskipTests

FROM eclipse-temurin:21-jre

WORKDIR /app

COPY --from=build /app/target/*.jar app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]

dockerignore作成

type nul > .dockerignore

下記の内容で編集。

target
.git
.idea
.vscode

テンプレート作成

下記の公式ページでテンプレートを作成します。

https://start.spring.io

項目設定値
ProjectMaven
LanguageJava
Spring Boot初期選択のもの
Project Metadata Group初期のまま
Project Metadata Artifactodaneko(任意)
Project Metadata Package name自動
Project Metadata PackagingJar
Project Metadata ConfigurationProperties
DependeciesSpring Web
MySQL Driver

各項目を設定後、「GENERATE」をクリック。
解凍後、中身をプロジェクトフォルダにコピペ。

pom.xml編集

pom.xmlの<dependencies>の最後に下記を追記。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

application.properties編集

下記を追記。

spring.datasource.url=${SPRING_DATASOURCE_URL}
spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

コンテナビルド・起動

docker compose up -d --build

コントローラー作成

mkdir src\main\java\com\example\odaneko\controller

ni src\main\java\com\example\odaneko\controller\HelloController.java

下記の内容で編集。
DBにアクセスして1を取得するだけのAPIを作成。

package com.example.odaneko.controller;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    private final JdbcTemplate jdbcTemplate;

    public HelloController(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @GetMapping("/")
    public Integer db_test() {

        Integer result = jdbcTemplate.queryForObject(
                "SELECT 1",
                Integer.class
        );

        return result;
    }
}

コンテナ再ビルド・起動

コンテナ停止

docker compose down

コンテナビルド・起動

docker compose up -d --build

環境が構築できたか確認

下記にアクセス。
http://localhost:8080/
1が返ってくればOK。

以上になります。
お読み頂き、ありがとうございました。