GitLab: GitLab CI で Docker イメージをビルドする方法

このドキュメントはCI/CDガイドの一部です。完全なガイドはこちらからご覧いただけます:GitLab CI/CD の使い方

👋 Stackheroドキュメントへようこそ!

Stackheroは、チーム向けに設計された、すぐに使えるGitLabクラウドソリューションを提供しています。高速・安全・スケーラブルな環境をお求めの方に最適です:

  • ユーザー数、リポジトリ、データ転送量、CI/CD処理時間が無制限で、柔軟性を最大限に確保できます。
  • ワンクリックで簡単にアップデートでき、ダウンタイムなしで常に最新の環境を維持できます。
  • HTTPSで保護されたカスタムドメイン名(例:https://git.your-company.com)により、プロフェッショナルなブランディングとセキュリティを実現します。
  • プライベートかつ専用インフラ上での安定したパフォーマンスと強固なセキュリティ。他の利用者の影響を受けず、完全な分離環境を提供します。
  • ホスティング場所は🇪🇺 ヨーロッパまたは🇺🇸 USAから選択可能。コンプライアンスやレイテンシー要件に合わせてお選びいただけます。

すぐに利用を開始し、コード開発に集中できます。StackheroのGitLabクラウドホスティングソリューションは、約5分でご利用可能です。

プロジェクトリポジトリに Dockerfile が含まれている場合、Docker イメージのビルド、実行、必要に応じてレジストリへの公開まで自動化できます。

まず、Stackhero ダッシュボードで「Docker in Docker(DinD)」サポートを有効にしてください。

DinD サポートを有効にすると、特にユーザー同士のプロジェクト隔離やアクセス制御を重視する場合、セキュリティリスクが発生します。

次に、gitlab-ci.yml ファイルを編集し、DinD を利用して Dockerfile をビルドするパイプライン設定を追加します。以下はその一例です:

image: docker:29

build:
  stage: build
  services:
    - name: docker:29-dind
      alias: docker
  variables:
    # docker CLI を Docker-in-Docker サービス(非 TLS ポート)に向けます。
    # DOCKER_HOST の重要性については下記の注意を参照してください。
    DOCKER_HOST: "tcp://docker:2375"
    DOCKER_TLS_CERTDIR: ""
  before_script:
    - docker info
  script:
    # "my-docker-image" をご希望のイメージ名に置き換えてください:
    - docker build -t my-docker-image .
    # 必要に応じて、Docker イメージのテストも可能です:
    # - docker run my-docker-image /script/to/run/tests

docker:29-dind サービスはジョブの横で Docker デーモンを起動し、DOCKER_HOSTdocker CLI にそのデーモンを使うよう指示します。docker:dind サービスを宣言する際は必ず DOCKER_HOST を設定してください。 省略すると CLI は別のデーモンに静かに接続し、サービスが誤設定でもビルドが成功してしまい、本来の問題が隠れてしまいます。DOCKER_TLS_CERTDIR: "" により、ジョブ内部ネットワークの非 TLS ポート 2375 を利用します。

よりシンプルな方法として、services ブロックと両方の変数を省略することも可能です。Stackhero の runner では、マウントされたソケット経由で Docker デーモンがすでに利用可能なため、docker build だけでそのまま動作します。

GitLab CI で Docker イメージをビルドする詳細については、公式 GitLab ドキュメント をご参照ください。