紹介する内容
- docker-compose.ymlにないdockerコンテナをdocker composeのコンテナに認識させます
- docker-compose.ymlはdockerコンテナ2つ立てる設定にしておいて、別でdockerコンテナ立ててdocker-compose psに3つに見える例を見せます
結論
docker composeはdockerコンテナのlabelを基準として仲間を判定している
- 筆者の調査不足かもしれませんが、公式ドキュメントで該当する内容は発見できませんでした。
- ですが、docker composeのソースコードからlabelが関わっていることを確認しました。
- https://github.com/docker/compose/blob/4bf623d53da363d576bfb4e57d139df97032f004/compose/project.py#L330
Docker Engine SDKsで作業しながら、動的に立てたdockerコンテナをdocker composeに編入したい時に応用できます
- docker composeが立てたコンテナのlabelを確認して、動的に立てる予定のdockerコンテナのlabelを同じくすれば可能です
labelを同じくしてdocker composeの仲間扱いされたdockerコンテナは一緒にdocker-compose downできます
紹介始めます
ディレクトリ構成
全体ソースコードは https://github.com/cheekykorkind/qiita-example/tree/master/docker-compose/allow-raw-docker-as-compose で確認できます
まず、docker composeのdockerコンテナがどのようなlabelを持っているか確認します
以下のコマンドでdocker composeで立てたコンテナ名を確認して、labelを確認します。
docker ps
docker inspect コンテナ名
目標であるlabelはConfig
配下のLabels
で確認できます。
必要な部分は以下の3行です。後で動的に立てるdockerコンテナのlabel付ける時に使います。
"com.docker.compose.oneoff": .....
"com.docker.compose.project": .....
"com.docker.compose.service": .....
動的に立てるdockerコンテナのlabelをdocker composeのdockerコンテナと同じくします
上のdocker inspectから確認したlabel中身の3行を持ってファイルを作ります。
./labels
ファイルになります
com.docker.compose.oneoff=False
com.docker.compose.project=allow-raw-docker-as-compose
com.docker.compose.service=compose-postgres11.7
label設定を適用して動的にdockerコンテナを立てます
-
docker run -d --label-file ./labels nginx:1.19.0-alpine
- コマンドを説明すると
docker run -d --label-file label設定ファイルパス dockerイメージ名
です
- コマンドを説明すると
- 同じ動作できるコマンドを追加で紹介します
docker run -d --label com.docker.compose.oneoff=False --label com.docker.compose.project=allow-raw-docker-as-compose --label com.docker.compose.service=compose-postgres11.7 nginx:1.19.0-alpine
- https://docs.docker.com/engine/reference/commandline/run/#set-metadata-on-container--l---label---label-file
例を見せます
- docker composeがあるデレクトリーに移動します
cd qiita-example/docker-compose/allow-raw-docker-as-compose
- docker composeのコンテナたちをバックグラウンドで起動します
docker-compose up -d
- docker composeのコンテナだけあることを確認します
docker-compose ps
- docker composeではないdockerコンテナを起動します
docker run -d --label-file ./labels nginx:1.19.0-alpine
- 別で起動したdockerコンテナがdocker composeのコンテナに認識されました
docker-compose ps