目次
-
- Docker Compose とは
-
- Docker Compose の仕組み
-
- docker-compose.yml
- 3-1. 書き方
- 3-2. 作成
- 3-3. 実行
-
- 後片付け
- 4-1. ネットワークとコンテナの削除
- 4-2. イメージの削除
- 4-3. 注意点
1. Docker Compose とは
Docker Compose とは、コンテナやボリューム、ネットワークの作成/停止/破棄の操作をまとめて実行できる仕組みです。
複数のコンテナを組み合わせてシステム構築する場合、実行するコマンド、引数やオプションが多くなり面倒になります。
以下、WordPressの環境構築の設定例です。
$ docker network create ネットワーク名
$ docker run --name コンテナ名 -itd --net=Dockerネットワーク名 -p 8081:80 -e DB_HOST: mysqlコンテナ名 -e DB_USER: DBユーザ -e DB_PASS: DBパスワード -e DB_NAME: DB名 wordpress
$ docker run --name コンテナ名 -itd --net=Dockerネットワーク名 -p 8081:80 -e DB_HOST: mysqlコンテナ名 -e DB_USER: DBユーザ -e DB_PASS: DBパスワード -e DB_NAME: DB名 wordpress
このような環境を構築する際に使用するのが Docker Compose です。
2. Docker Compose の仕組み
Docker Composeは、docker-compose.yml
という定義ファイルに、コンテナやボリューム、ネットワークの構成をあらかじめ記述しておき、その定義ファイルを読み込ませることで、記述した構成を一気に構築できます。(※例1)
3. docker-compose.yml
3-1. 書き方
version: '3'
services:
コンテナ名:
depends_on:
- 依存するコンテナ名
image: Docker Hub より pull してくるイメージ
networks:
- Docker ネットワーク名
ports:
- ポートの設定
restart: always
environment:
環境変数1: 値1
環境変数2: 値2
networks:
ネットワーク名:
volumes:
ボリューム名:
|大項目|小項目|内容|docker runコマンド実行時のオプション|
|---|---|---|---|---|
|version|-|docker-composeで使用するバージョンを定義します。
バージョンによって書き方が異なります。|-|
|services|-|コンテナの情報を定義します。
docker composeでは、コンテナのことをサービスと呼びます。|-|
|-|depends_on|依存するコンテナ名を定義し、コンテナの起動順を制御できます。|-|
|-|image|Docker Hub より pull してくるイメージを定義します。|-|
|-|networks|接続するネットワークを指定します。|-|
|-|ports|ポートのマッピングを定義します。|-p|
|-|restart|コンテナが異常停止した際の再起動についての設置を定義します。
(always の場合は、明示的にstopを実行しない限り、再起動が実施されます。)|-|
|-|environment|を定義します。|-e|
|networks|-|ネットワークの情報を定義します。|--net|
|volumes|-|ボリュームのマウント設定を定義します。|-v|
3-2. 作成
① MySQLコンテナ
version: '3'
services:
mysql-container:
image: mysql:5.7
networks:
- wordpress-network
volumes:
- wordpress-volume:/var/lib/mysql
ports:
- "3306:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: admin
MYSQL_PASSWORD: adminpass
MYSQL_DATABASE: wordpressdb
② WordPressコンテナ
version: '3'
services:
wordpress-container:
depends_on:
- mysql-container
image: wordpress
networks:
- wordpress-network
ports:
- 8081:80
restart: always
environment:
DB_HOST: mysql-container
DB_USER: admin
DB_PASS: adminpass
DB_NAME: wordpressdb
③ Docker ネットワーク
networks:
wordpress-network:
④ ボリューム
volumes:
wordpress-volume:
完成版
version: '3'
services:
wordpress-container:
depends_on:
- mysql-container
image: wordpress
networks:
- wordpress-network
ports:
- 8081:80
restart: always
environment:
DB_HOST: mysql-container
DB_USER: admin
DB_PASS: adminpass
DB_NAME: wordpressdb
mysql-container:
image: mysql:5.7
networks:
- wordpress-network
volumes:
- wordpress-volume:/var/lib/mysql
ports:
- "3306:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: admin
MYSQL_PASSWORD: adminpass
MYSQL_DATABASE: wordpressdb
networks:
wordpress-network:
volumes:
wordpress-volume:
3-3. 実行
docker-compose up
で、docker-compose.yml
で定義したコンテナやネットワーク、ボリュームを作成・起動します。
実行時のオプションは以下を指定します。
-
-f
でdocker-compose.yml
のパスを指定。 -
-d
でバックグラウンドで実行する。
docker-compose -f パス名/docker-compose.yml up -d
http://localhost:8081/
に接続し、wordpressの設定画面が確認できれば成功です。
4. 後片付け
4-1. ネットワークとコンテナの削除
docker-compose down
でネットワークとコンテナを停止・削除します。
-f
オプションで docker-compose.yml
のパスを指定します。
docker-compose -f パス名/docker-compose.yml down
4-2. イメージ、ボリュームの削除
docker-compose down
では、イメージとボリュームが削除されないため、別途削除します。
docker rmi イメージ名
docker volume rm ボリューム名
4-3. 注意点
docker-compose down
は、docker-compose.yml
に定義されている内容を元に停止・削除を実行します。
docker-compose up
実行時の構成を停止・削除するわけではありません。
docker-compose up
実行後、docker-compose.yml
の定義内容に変更が加えられた場合、実行中の環境の削除漏れや意図しないコンテナの削除等が発生する可能性があるため注意が必要です。