スポンサーリンク

Docker デプロイ(CD/CI)

dockerでMySQL環境を作り、flywayでDDLを実行する、SpringBootから接続する

投稿日:2022年2月19日 更新日:

開発環境であれば、docker化するのはMySQLだけで良いです。
この記事では
・docker上にMySQLコンテナを作成する
・flywayでDDLを実行する
・SpringBootからMySQLに接続する
手順を解説します。

docker上にMySQLコンテナを作成する

次のようなdocker-compose.ymlを用意します。

version: "3"
services:
  db:
    container_name: db
    image: mysql:8
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: "rootpass"
      MYSQL_DATABASE: "okozukai"
      MYSQL_USER: "okozukaiadmin"
      MYSQL_PASSWORD: "xxxxx"
    ports:
      - 3306:3306

    volumes:
      - db-mysql:/var/lib/mysql
volumes:
  db-mysql:

docker-compose.ymlのあるディレクトリで、コンテナを起動します。

// コンテナを起動
$ docker-compose up -d
Creating network "okozukai-docker_default" with the default driver
Creating db ... done

// コンテナの起動確認
docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
98feeb4ceced   mysql:8      "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   db

MySQLコンテナ削除後もデータを残すために

    volumes:
      - db-mysql:/var/lib/mysql
volumes:
  db-mysql:

この記述により、ホスト(ローカル)のdocker管理領域にある「db-mysql」というボリュームを、MySQLコンテナの「/var/lib/mysql」にマウントします。

この記述がないと、docker-compose downしたり、コンテナを削除(docker rm)した時に、DBのデータが消えてしまいます。

但し、コンテナを削除するとDBのデータは消えますが、コンテナを停止(docker stop)して再度起動(docker start)した場合はデータは残っています。

SpringBootやflywayからMySQLに接続するために

    ports:
      - 3306:3306

この記述により、ホスト(ローカル)の3306ポートが、MySQLコンテナの3306ポートに転送されます。

つまり、「localhost:3306」はコンテナの3306ポートを意味するようになります。

この記述がないと、コンテナの3306ポートがホストに公開されず、コンテナの3306ポートにアクセスできません。

flywayでDDLを実行する

MySQLコンテナの3306ポートがホストの3306と紐づいているため、従来通りの方法でflyway migrateなどを行うことができます。

flyway {
    url = 'jdbc:mysql://localhost:3306/okozukai'
    user = 'okozukaiadmin'
    password = 'xxxxx'
    schemas = ['okozukai']
}
intelliJからgradle flywayMigrateを実行した

SpringBootからMySQLに接続する

MySQLコンテナの3306ポートがホストの3306と紐づいているため、従来通りの方法でSpringBootから接続できます。

spring:
    dataSource:
        url: jdbc:mysql://localhost:3306/okozukai
        username: okozukaiadmin
        password: xxxxx
        driver-class-name: com.mysql.cj.jdbc.Driver
server:
    port: 8082

SpringBootからDBに接続できました。

DBツールからMySQLに接続する

MySQLコンテナの3306ポートがホストの3306と紐づいているため、従来通りの方法で各種DBツールから接続できます。

Sequal Aceの設定例
flywayMigrateされている。

Udemyのハンズオン動画講座でSpringBootのスキルを磨く!

スポンサーリンク

-Docker, デプロイ(CD/CI)

Copyright© 【Spring Hack】 , 2022 All Rights Reserved Powered by AFFINGER5.