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 executorDocker-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がそのまま動作します。