自由気ままに書いちゃおう

好きなことをつらつらと・・・

【Docker】docker-composeコマンドの挙動について

備忘です。
docker-composeコマンドの挙動について記載致します。

■はじめに

docker-compose up コマンドを実行すると、カレントディレクトリ内のdocker-compose.yamlが読み込まれ、その内容に従いコンテナが起動致します。

■upコマンド後にdocker-compose.yamlを修正するとどうなるのか?

実際にやってみます。

以下のComposeファイルを利用し、busyboxコンテナを2台作成しました。

f:id:guri2o1667:20210602103411p:plain

f:id:guri2o1667:20210602103428p:plain

この状態でComposeファイルからbb2の記述をコメントアウトします。

f:id:guri2o1667:20210602103501p:plain

では、downさせます。

f:id:guri2o1667:20210602103559p:plain

何やら警告とエラーが出てます。

警告内容は、
「--remove-orphansフラグを付けてこのコマンドを実行することで、クリーンアップすることができます。」という内容です。
主旨とずれるので、一旦無視します。

エラー内容は、ネットワークを削除できなかった。という内容です。
ネットワークを削除できなかった理由はbb2が利用しているからです。

down後のdockerネットワークを見てみると、test1_defaultというネットワークが残っています。

f:id:guri2o1667:20210602104019p:plain

コンテナ状態を見てみます。

f:id:guri2o1667:20210602104108p:plain

docker-compose psコマンドではbb1 , bb2 が消えており、docker ps -aコマンドではbb2のみ残っています。

■結論:upコマンド後にdocker-compose.yamlを修正するとどうなるのか?

docker-compose up /downコマンドはコマンド実行時のComposeファイルを読み取って処理が行われます。

そのため、Composeファイルを修正した場合、修正前後での更新履歴みたいなものは全く保持しておらず、Composeファイルの記載を常にマスターデータとして認識し、ただ単に実行(up/down)だけしている、ということになります。

■補足:upコマンド後にdocker-compose.yamlを修正するとどうなるのか?

結論と若干矛盾しますが、docker-composeコマンドに以下のオプション(--remove-orphans)を付与して実行することで、bb2も一緒に削除することできます。

f:id:guri2o1667:20210602105140p:plain

■docker-composeコマンドを利用して個別のコンテナを操作する

docker-composeで起動したコンテナは通常のdockerコマンドによる操作が可能です。
そのため、docker-composeで起動したコンテナを停止することもできます。
ここでは、bb1,bb2,bb3をdocker-composeで起動し、bb3のみdocker stopコマンドで停止しました。

f:id:guri2o1667:20210602105903p:plain


ただ、docker-composeで起動したコンテナを、個別に起動/停止/削除/ログインしたい場合には、
以下の通りdocker-composeコマンドのサブコマンドを利用したほうが良いです。

【個別で停止】

f:id:guri2o1667:20210602110210p:plain

【個別で起動】

2つの方法があります。
① docker-compose start
f:id:guri2o1667:20210602110244p:plain

② docker-compose up
こちらの方法の場合、
Composeファイルを読み込んで停止していたコンテナを起動することができます。

f:id:guri2o1667:20210602110537p:plain

【個別に削除】

f:id:guri2o1667:20210602110704p:plain

【個別に削除後にupコマンド実行】

bb3が再作成されます。
f:id:guri2o1667:20210602110802p:plain


【個別にログイン】
docker execと異なり、-itオプションは不要です。

f:id:guri2o1667:20210602110944p:plain


以上です。