MySQLのdocker-compose最小構成設定
- docker-compose.yml
docker-compose.yml
services:
db:
image: mysql:latest
volumes:
- ./db/datadir: /var/lib/mysql
- ./db/backups: /data/backups
env_file:
- project.env
ports:
- 3306:3306
#app:
# ...
- project.env
project.env
MYSQL_ROOT_PASSWORD="password"
MYSQL_DATABASE="dbname"
TZ="Asia/Tokyo"
ディレクトリ構成
- Dockerfileはオプション
./projectdir
docker-compose.yml
project.env
db/ #ビルド時に生成
datadir/ #ビルド時に生成
backups/ #ビルド時に生成
# app/
# Dockerfile
ビルド
- docker-compose.ymlと同じディレクトリで実行
docker-compose up -d
アクセス
- ホストからコンテナのmysqlにログイン
mysql -u root -p -h 127.0.0.1 -P 3306
- ホストからコンテナ内に入り、コンテナ内でmysqlにログイン
docker exec -it ContainarName bash
mysql -u root -p
参考
- mysql公式イメージ - hub.docker.com
- Docker公式リファレンス - docs.docker.com
- Docker ドキュメント日本語化プロジェクト - docs.docker.jp
- Compose file specification - github.com
前提
- 2024/04 版
- 必要最低限のとりあえず動く設定を作る
- ベストプラクティスを目指す
- 環境
- WSL2+Ubuntuの構成
- DockerDesktopを使用
- 運用
- ホストのhomeディレクトリから各用途に合わせてプロジェクト用のディレクトリを作り、各プロジェクト内でDockerfile、docker-compose.ymlを管理する
- docker-compose.ymlはGitで管理して開発者間でビルド情報を共有する
- 公式Dockerイメージ(Dockerfile)には可能な限り変更は加えない
- DBに変更を加えたい場合はデータマウントを活用する
- やむを得ずDockerfileに変更を加える場合は作成したDockerイメージをDockerHubで管理する
docker-compose.ymlレシピ
サービス名をつける
services:
db:
# app:
imageまたはbuildを選択
image
- DockerHubのイメージを直接使う場合に記載(Dockerfileを使用しない)
services:
db:
image: mysql:5.7
build
- Dockerfileを使用する場合に使用、Dockerfileの相対パスを指定
services:
db:
build: ./projectdir
volumeの形式を選択
- ボリュームを使うとデータはDockerコンテナの起動・停止のサイクルから独立してホストマシンとデータを共有・管理できる
volumes(サービス内)
services:
db:
volumes:
- ./db/datadir: /var/lib/mysql
volumes(トップレベル)
- コンテナ間でボリュームを共有したい場合に使用する
- Dockerの管理下
/var/lib/docker/volumes
でストレージ領域を確保される
services:
volumes:
- db_data: /var/lib/mysql
volumes:
db_data:
- マウントポイントはコマンドで確認できる
docker volume ls
docker volume inspect [volume name]
環境変数を設定する
- .envファイルでコンテナ内で使用する環境変数を書いてインポートできる
- パスワードなど共有したくない情報はローカルで管理する
services:
db:
env_file:
- project.env
ポート指定
- ホスト→コンテナへポートフォワードの設定ができる
- ホストマシンのポート番号:コンテナのポート番号
services:
db:
ports:
- "3000:3000"
依存関係(option)
- 起動順序をつけたいとき
# 例:db起動後にappから接続したい場合
services:
app:
depends_on:
- db
version(option)
- 古いバージョンを指定したいときに使う