gitlab ciにおけるdocker-in-docker (dind)サービスの役割
質問内容
公式発表によると
gitlab ドキュメント
を有効にする一つの方法として
docker build
の中で
ci
パイプラインの中で
dind
サービスを利用することです (この点については
gitlab-ci
サービス
).
しかし、Dockerエグゼキュータ上で実行されるciジョブでは常にそうであるように
docker:latest
のイメージも必要です。
誰か説明してください。
-
の違いは何ですか?
docker:dind
とdocker:latest
の画像は? -
(最も重要)です。
なぜ
は
ともに
サービスや必要なdockerイメージ(例:表示されているように
この例では
を実行するために必要なサービスやDockerイメージ(例えばgithubのドキュメントからリンクされている)を示します。
docker build
を実行するために、例えば、ciジョブ内でdocker:latest
の画像はないのですか? 内で、ジョブが実行される !)にドッカーデーモンを組み込んでいます。docker-compose
も)、必要なコマンドに必要なツールである(例えばdocker build
,docker push
など)?
私が間違っていなければ、質問は多かれ少なかれなるものです。
なぜ docker クライアントと docker デーモンは同じ docker (有効) コンテナに常駐できないのですか?
どのように解決するのですか?
<ブロッククオートdocker:dindとdocker:latestのイメージの違いは何ですか?
-
docker:latest
には、Docker デーモンに接続するために必要なもの、つまり、Docker デーモンを起動するために必要なものがすべて含まれています。docker build
,docker run
などと表示されます。dockerデーモンも入っていますが、そのエントリポイントとして起動されていません。 -
docker:dind
ビルドオンdocker:latest
を構築し、そのエントリポイントとして docker デーモンを開始します。
つまり、内容はほとんど同じですが、エントリーポイントを通して、1つの接続先が
tcp://docker:2375
に接続するように設定されており、もう一方はデーモンとして使用されることを意図しています。
なぜサービスとdockerイメージの両方が必要なのでしょうか[...]?
両方必要なわけではありません。どちらか一方だけでいいのです、start
dockerd
を最初のステップとして実行し、その後
docker build
と
docker run
のように、いつものようにコマンドを
ここで
どうやらgitlabではこれが本来のやり方だったようです。
ある時点では
. しかし、私は単に
service: docker:dind
と書く方がすっきりします。
before_script
を設定します。
dockerd
. また、& をどのように起動するかを考える必要はありません。
dockerd
を適切にベースイメージにインストールする方法を考える必要もありません (もし
docker:latest
.)
サービスの宣言は
.gitlab-ci.yml
の中で宣言することで、ランナーがドッカーインドッカーをマウントしていることが分かっている場合、簡単にドッカーインドッカーを交換することができます。
/var/run/docker.sock
をイメージにマウントしていることがわかれば、 簡単に入れ替えることができます。を設定することができます。
保護された変数
DOCKER_HOST
から
unix:///var/run/docker.sock
を追加することで、より高速なビルドが可能になります。このようなランナーにアクセスできない人は、あなたのリポジトリをフォークして
dind
サービスを利用することができます。
.gitlab-ci.yml
.
関連
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Dockerコンテナのシェルに入るにはどうしたらいいですか?
-
[解決済み] 古いDockerコンテナを削除する方法
-
[解決済み】Dockerは仮想マシンとどう違うの?
-
[解決済み] Docker-Composeで1つのコンテナに対するロギングを無効にする
-
[解決済み] Docker ENTRYPOINTとKubernetesコンテナ仕様COMMANDの違い?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] docker login unknown shortorthand flag: 'e'
-
[解決済み] ディレクトリをファイルにマウントしようとしていませんか(またはその逆)?
-
[解決済み] 実行中のすべてのdockerコンテナを再起動するためのコマンド?
-
[解決済み] docker-compose Version 3 の conditions form の depends_on に代わるものは何ですか?
-
[解決済み] Dockerfileの条件付きENV
-
[解決済み] Dockerのベースイメージを自作するには?
-
[解決済み] 画像に複数のタグを付けることは可能ですか?
-
[解決済み] .gitlab-ci.yml で docker-compose build を実行する。
-
[解決済み] Dockerエラー: クライアントとサーバーのバージョンが同じでない
-
[解決済み] プライベートなDockerレジストリにリモートでアクセスするには?