準備
Docker Composeのインストール
Windows系やMac系だとDockerのインストール時点で自動的にインストールされているようですが、Linux系だと別途インストールする必要があるようです。
バージョンについてはGitHubから適切なバージョンを選択してきます。
Releases · docker/compose · GitHub
・インストール
curl -L https://github.com/docker/compose/releases/download/1.25.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
・実行権限を付与
chmod +x /usr/local/bin/docker-compose
動作確認用のdocker-compose.yml
参考なので、なんでもかまいません。
version: '3.7' services: webserver: image: nginx ports: - "8000:80" dbserver: image: mongo:4.2.5 ports: - "28000:27017"
DockerのバージョンとCompose fileのバージョン
docker-compose.ymlの初手にポツンと書いてあるCompose fileバージョンですが、互換はされているのかもしれませんが以下で一応調べました。
Dockerのバージョンを確認して対応しているものを選択するのが無難でしょう。
Compose file version 3 reference | Docker Documentation
Compose file format | Docker Engine release |
---|---|
3.8 | 19.03.0+ |
3.7 | 18.06.0+ |
3.6 | 18.02.0+ |
3.5 | 17.12.0+ |
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.4 | 17.12.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |
1.0 | 1.9.1.+ |
Docker Composeの運用系コマンド
docker-composeコマンドを実行する場合には原則「docker-compose.yml」が存在するディレクトリで実行します。
存在する場所以外で実行するには別途パスを指定する必要があります。
Docker Composeのバージョン確認
docker-compose --version
docker-compose version 1.25.3, build d4d1b42b
コンテナの生成起動(up)
docker-compose.ymlの記載内容に従ってコンテナを生成起動する場合には「up」コマンドを使用します。
docker-compose up
・オプション(一部抜粋)
-d | バックグラウンド実行 |
---|---|
--build | イメージのビルドする |
--nobuild | イメージのビルドしない |
コンテナの状態確認(ps)
docker-compose ps
・出力例
Name Command State Ports
---------------------------------------------------------------------------------------
sample-com_dbserver_1 docker-entrypoint.sh mongod Up 0.0.0.0:28000->27017/tcp
sample-com_webserver_1 nginx -g daemon off; Up 0.0.0.0:8000->80/tcp
通常のDockerコンテナコマンドのlsでも同様の情報が出力できますね。
コンテナのログ確認(logs)
コンテナのlogsと同様の感じで出力ができます。
docker-compose logs
・出力例
dbserver_1 | 2020-04-21T13:14:39.585+0000 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
コンテナでのコマンド実行(run)
docker-compose run webserver /bin/bash
・例
[ec2-user@ sample-com]$ docker-compose run webserver /bin/bash
root@cf76ecfb6891:/#
一瞬ハマったのがpsコマンドなどで表示される「sample-com_dbserver_1」などのコンテナ名ではなく、「docker-compose.yml」で設定したサービス名を指定する点です。
コンテナの起動
docker-compose start
・例
[ec2-user@ sample-com]$ docker-compose start
Starting webserver ... done
Starting dbserver ... done
コンテナの停止
docker-compose stop
・例
[ec2-user@ sample-com]$ docker-compose stop
Stopping sample-com_webserver_1 ... done
Stopping sample-com_dbserver_1 ... done
コンテナの再起動
docker-compose restart
・例
[ec2-user@ sample-com]$ docker-compose restart
Restarting sample-com_webserver_1 ... done
Restarting sample-com_dbserver_1 ... done
コンテナの一時停止、再開
独学だとなかなか有効活用できていない一時停止系のコマンド。
・コンテナの一時停止
docker-compose pause
・停止中コンテナの再開
docker-compose unpause
コンテナのポート確認
なんとなく使い勝手が悪く感じる。これもまた有効な使い方があるんだろうか。
docker-compose port webserver 80
・出力結果
0.0.0.0:8000
コンテナの設定確認
ポート諸々こっちの方が確認しやすい気がするけどコンテナ数が増えたりするとみにくくなるのかな。
docker-compose config
services:
dbserver:
image: mongo:4.2.5
ports:
- published: 28000
target: 27017
webserver:
image: nginx
ports:
- published: 8000
target: 80
version: '3.7'
コンテナの削除(rm)
原則はDockerコンテナコマンドと同じような感じみたいですね。
削除実行するにはコンテナが停止していないといけいない。
あとは明示的に復元する可能性がある場合以外はボリュームがたまるので、「-v」オプション付けてボリュームも明示的に削除した方がよさそう。
docker-compose rm
・例
[ec2-user@ sample-com]$ docker-compose rm -v
Going to remove sample-com_dbserver_1, sample-com_webserver_1
Are you sure? [yN] y
Removing sample-com_dbserver_1 ... done
Removing sample-com_webserver_1 ... done
リソースの一括削除(down)
生成したコンテナだけではなく、コンテナを含めたイメージやネットワークなど、「.yml」ファイルで構成した全てのリソースが削除されます。
なおイメージは後述するオプションを明示的につけた場合のみ削除されるようです。
docker-compose down
・実行例
[ec2-user@ sample-com]$ docker-compose down --rmi all -v
Removing sample-com_webserver_1 ... done
Removing sample-com_dbserver_1 ... done
Removing network sample-com_default
Removing image nginx
Removing image mongo:4.2.5
・オプション
--rmi all | イメージも含めて削除する |
---|---|
-v | コンテナのボリュームも削除する |
上記の実行例のようにこの二つのオプションを付けて実行すればキレイさっぱりになりますね。
ーーーーーーーーーーーーーーー
今回はコマンド確認まで、次回は実際にdocker-composeを使用して複数コンテナな簡易アプリを構築する予定。