ホームページ >運用・保守 >Docker >docker:latest と docker:dind の違いは何ですか

docker:latest と docker:dind の違いは何ですか

王林
王林転載
2020-10-20 17:31:554643ブラウズ

docker:latest と docker:dind の違いは何ですか

背景:

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 サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。