🙌

docker-composeを使用したDBの作成について

2025/01/22に公開

DBサーバーを並列で起動して遊んで見たので、その覚書

docker-composeとは

複数のコンテナを同時に起動させるときに役立つツールのこと。

メリット

  • WebサーバーとDBサーバーの両方同時に使いたいケースの場合、一度に立ち上げることができる。
  • ネットワーク設定が簡単

使い方

  1. compose.ymlを作成

compose.ymlファイル内で今回使いたいDBのimageやコンテナ名、環境変数、解放するポート等を書き込む必要がある。
今回はDockerの公式からmysqlの別バージョンを参照

compose.yml
version: '3'

services:
  db1:
    image: mysql:8
    container_name: mysql8
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: hoge-db
      MYSQL_USER: user
      MYSQL_PASSWORD: 1234
      TZ: Asia/Tokyo
    ports:
        - 30000:3306
    volumes:
        - db-store-ver1:/var/lib/mysql
        - ./conf/my.cnf:/etc/mysql/conf.d/my.cnf
  db2:
    image: mysql:5.7
    container_name: mysql5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: hoge-db
      MYSQL_USER: user
      MYSQL_PASSWORD: 1234
      TZ: Asia/Tokyo
    ports:
        - 30001:3306
    volumes:
        - db-store-ver2:/var/lib/mysql
        - ./conf/my.cnf:/etc/mysql/conf.d/my.cnf
volumes:
  db-store-ver1:
  db-store-ver2:
  1. コンテナ実行
    コマンドでコンテナを実行
cmd
$ docker-compose up

リンクされているコンテナすべてが起動する
用途によってoptionを付けてもいい。(無くても実行できる)

オプション

コード 内容
-d, --detach バックグラウンドでコンテナを実行し、新しいコンテナ名を表示
--abort-on-container-exit と同時に使えない
--no-color 白黒で画面に表示
--quiet-pull 進捗情報を表示しない
--no-deps リンクしたサービスを起動しない
--force-recreate 設定やイメージに変更がなくても、コンテナを再作成する
--no-recreate と同時に使えない
--always-recreate-deps 依存関係のあるコンテナを再作成
--no-recreate と同時に使えない
--no-recreate コンテナが既に存在していれば、再作成しない
--force-recreate と同時に使えない
--no-build イメージが見つからなくても構築しない
--no-start 作成してもサービスを起動しない
--build コンテナを開始前にイメージを構築する
--abort-on-container-exit コンテナが1つでも停止したら全てのコンテナを停止
-d と同時に使えない
--attach-dependencies 依存するコンテナにアタッチ
-t, --timeout TIMEOUT アタッチしている、あるいは既に実行中のコンテナを停止する時のタイムアウト秒数を指定 (デフォルト:10 )
-V, --renew-anon-volumes 以前のコンテナからデータを再利用せず、匿名ボリュームの再作成
--remove-orphans Compose ファイルで定義されていないサービス用のコンテナを削除
--exit-code-from SERVICE 指定されたサービスコンテナの終了コードを返す
--abort-on-container-exit の指定を暗に含む
--scale SERVICE=NUM SERVICE のインスタンス数を NUM とする
Compose ファイルに scale の設定があっても上書きされる

起動後のDockerコンテナの様子

docker desktop

二つのコンテナが同時に起動していることがわかる

SQLエディタでの確認 A5SQL

mysql8

mysql5.7

指定したポートで同時にDBサーバーが立ち上がっていることを確認

まとめ

Dockerの公式imageはmysqlだけでなく、SQLServerやPostgreSQL、MariaDB等のimageがある。
環境によって切替もymlファイルを変更するだけでできるため容易。
また、今回はDBサーバーだけを同時に2つ起動したが、基本的にはWebサーバーとDBサーバーを同時に起動する。
色々な環境でも使えるため、今後使えるようになっておきたい。

Discussion