GitLab Runner: Docker-in-DockerでDockerイメージをビルドする
このドキュメントはDockerイメージのビルドガイドの一部です。完全なガイドはこちらからご覧いただけます:StackheroランナーとDocker-in-Dockerを活用し、GitLab CI/CDパイプラインから効率的にDockerイメージをビルド&プッシュする方法。
👋 Stackhero ドキュメントへようこそ!
Stackhero では、GitLab Runner cloud のシンプルなソリューションを提供しており、GitLab CI/CD ジョブの実行を効率的かつ手間なく行えます。主な特長は以下の通りです:
- 無制限の CI/CD 分数:パイプラインを必要なだけ何度でも実行でき、分単位の課金や予期しない追加料金はありません。
- 複数のジョブを同時実行:複数のジョブを並列で実行し、開発スピードを向上できます。
- Docker executor と Docker-in-Docker サポート:CI/CD プロセスの一部として、コンテナイメージのビルドやプッシュを簡単に行えます。
- GitLab.com および セルフマネージド GitLab インスタンスの両方にシームレスに対応。
- 高速な NVMe/SSD ストレージを備えたプライベートかつ専用のインフラストラクチャにより、安定した予測可能なビルドパフォーマンスを実現します。
- 🇪🇺 ヨーロッパ および 🇺🇸 USA のリージョンでご利用いただけますので、チームのニーズに合わせて選択可能です。
時間を節約:最初の GitLab Runner を接続し、数分でパイプラインの実行を開始できます!
以下のサンプル.gitlab-ci.ymlをリポジトリに追加できます。この設定は、プロジェクトルートのDockerfileをビルドします。
build-image:
stage: build
image: docker:29
services:
- name: docker:29-dind
alias: docker
variables:
DOCKER_HOST: "tcp://docker:2375"
DOCKER_TLS_CERTDIR: ""
before_script:
- docker info
script:
# "my-image"を任意のイメージ名に置き換えてください:
- docker build -t my-image .
# 必要に応じて、ビルドしたイメージで簡単なテストを実行できます:
# - docker run --rm my-image /path/to/tests
この例ではDockerイメージのバージョン29を使用しています。新しいバージョンが利用可能な場合は、そちらを使用することもできます。最新のタグは公式Dockerイメージページで確認できます。
この構成では、docker:29-dindサービスがジョブと並行してDockerデーモンを起動し、DOCKER_HOST: "tcp://docker:2375"でdocker CLIがそのデーモンを利用するよう指定しています。docker:dindサービスを宣言する場合は必ずDOCKER_HOSTを設定してください。 これを設定しないと、CLIが別のデーモンにサイレントに接続してしまい、サービスの設定ミスが隠れてしまいます(Testcontainersのようなサービス依存ツールも正常に動作しません)。DOCKER_TLS_CERTDIR: ""は、ジョブ内部ネットワーク上の非TLSポート2375で接続する設定です。
よりシンプルな方法として、servicesブロックや変数を省略することも可能です。Stackheroのランナーは、マウントされたソケット経由で利用可能なDockerデーモンも提供しているため、追加設定なしでdocker buildがそのまま動作します。