背景:
CI を記述するとき、イメージはジョブの実行環境として宣言され、各ジョブは純粋なコンテナーで実行されます。
Docker ビルド、Docker Push、その他の操作を実行するために Docker コンテナ環境が必要になる場合があります。公式の docker イメージを見ると、docker:latest、docker:dind、docker:git の 2 つの主要なバージョンがあることがわかります。
(推奨チュートリアル: docker チュートリアル)
docker:dind
このイメージには、Docker クライアント (コマンド ライン ツール) と Docker デーモンが含まれています。
docker 履歴 docker:dind コマンドを通じて、docker:dind が docker:latest に基づいて Docker デーモンをインストールしたことがわかりました。最後の 2 つのビルド コマンドは次のとおりです。
IMAGE CREATED CREATED BY SIZE COMMENT 66dc2d45749a 8 weeks ago /bin/sh -c #(nop) CMD [] 0B <missing> 8 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["dockerd-entr… 0B ...
In run画像 sh CMD パラメータを指定できない場合、dockerd-entrypoint.sh コマンドはこのパラメータを受け取っても Docker デーモンを起動しません。コンテナー内で Docker デーモンを正しく起動してコンテナーに入るには、段階的に進める必要があります。
$ docker run -d --name dind --privileged docker:dind # 启动容器 $ docker logs -f dind # 查看启动日志 $ docker exec -it dind sh # 进入容器
docker:dind コンテナーを起動するときは、パラメーター --privileged を追加する必要があります。追加しないと、Docker デーモンが起動時にエラーが報告されます。
docker:latest
このイメージには Docker クライアントのみが含まれており、Docker デーモンのサポートが必要です。docker:dind を使用するか、ホストの /var/run/docker.sock をマウントできます。
このイメージを開始するのに --privileged パラメーターは必要ありません。
docker History docker:latest コマンドを使用すると、CMD のデフォルトは sh になります。
81f5749c9058 3 months ago /bin/sh -c #(nop) CMD ["sh"] 0B <missing> 3 months ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B ...
起動方法 1: ホストの Sock ファイルをマウントします。
$ docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock docker:latest
起動方法 2: と連携します。 docker: dind
docker:dind と docker:latest を同じネットワークに配置し、ネットワーク内の dind コンテナのエイリアスを docker として指定します。これは、最新のコンテナのデフォルトのデーモン ホストが docker と呼ばれるためです。
さらに、証明書の問題にも注意する必要があります。新しいバージョンの Docker クライアントでは、通信のセキュリティを確保するために、Docker デーモンと通信するために TLS 証明書が必要です。docker:dind コンテナは、証明書を生成します。環境変数 DOCKER_TLS_CERTDIR で指定されたディレクトリ。証明書は、docker:latest コンテナーで使用するためにマウントして提供する必要があります。
$ docker run --privileged --name some-docker -d \ --network some-network --network-alias docker \ -e DOCKER_TLS_CERTDIR=/certs \ -v some-docker-certs-ca:/certs/ca \ -v some-docker-certs-client:/certs/client \ docker:dind $ docker run --rm --network some-network \ -e DOCKER_TLS_CERTDIR=/certs \ -v some-docker-certs-client:/certs/client:ro \ docker:latest
docker:git
docker:git は、CI で Git を使用する場合に便利な git コマンドを含む docker:latest です。
以上がdocker:latest と docker:dind の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。