SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【Docker】入門⑩ Docker Composeによる複数コンテナの運用コマンド一覧

準備

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を使用して複数コンテナな簡易アプリを構築する予定。