将在其他地方启动的Docker容器识别为Docker Compose的容器

介绍的内容

    • 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 查看整个源代码。

labelD.png

首先,我们要确认Docker Compose的Docker容器具有哪些标签。

请使用以下命令查看由Docker Compose创建的容器名称,并确认标签。

docker ps
docker inspect コンテナ名
inspectCommand.png

目標であるlabelはConfig配下のLabelsで確認できます。
必要な部分は以下の3行です。後で動的に立てるdockerコンテナのlabel付ける時に使います。

"com.docker.compose.oneoff": .....
"com.docker.compose.project": .....
"com.docker.compose.service": .....
inspectLabelPart.png

 

動的に立てるdockerコンテナのlabelをdocker composeのdockerコンテナと同じくします

根据上述的docker inspect命令确认的标签内容,创建一个文件,命名为./labels。

com.docker.compose.oneoff=False
com.docker.compose.project=allow-raw-docker-as-compose
com.docker.compose.service=compose-postgres11.7

应用标签设置来动态创建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
allow-container-as-compose.gif
bannerAds