🙌
docker-composeを使用したDBの作成について
DBサーバーを並列で起動して遊んで見たので、その覚書
docker-composeとは
複数のコンテナを同時に起動させるときに役立つツールのこと。
メリット
- WebサーバーとDBサーバーの両方同時に使いたいケースの場合、一度に立ち上げることができる。
- ネットワーク設定が簡単
使い方
- 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:
- コンテナ実行
コマンドでコンテナを実行
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