GitLab CIでのDockerビルドとプッシュ

DockerイメージのビルドとGitLab Container Registryへのプッシュ用GitLab CI設定。Docker-in-Dockerのセットアップ、マルチステージビルド、タグ戦略をカバー。

Docker & Containers

詳細な説明

Docker Build & Push パイプライン

DockerイメージのビルドとプッシュはGitLab CIで最も一般的なユースケースの1つです。この設定はDocker-in-Docker(DinD)セットアップとスマートなタグ戦略を実装します。

パイプライン設定

stages:
  - build
  - push

variables:
  DOCKER_HOST: tcp://docker:2376
  DOCKER_TLS_CERTDIR: /certs

docker_build:
  stage: build
  image: docker:24
  services:
    - name: docker:24-dind
      alias: docker
  before_script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

Docker-in-Dockerセットアップ

docker:24-dindサービスはCIジョブコンテナ内でDockerデーモンを実行します。メインジョブはTLSでtcp://docker:2376経由で接続します。

タグ戦略

  • $CI_COMMIT_SHA: すべてのビルドが正確なコミットに紐づく一意の不変タグを取得します。正確なロールバックが可能になります。
  • latest: mainブランチでのみ更新されます。デプロイメントでプルされるデフォルトタグです。

GitLab Container Registry

GitLabは組み込みのコンテナレジストリを提供します。定義済み変数$CI_REGISTRY$CI_REGISTRY_USER$CI_REGISTRY_PASSWORDはすべてのCIジョブで自動的に利用可能で、手動設定は不要です。

ユースケース

プロジェクトにDockerfileがあり、プッシュのたびにDockerイメージを自動ビルド・公開したい場合にこの設定を使用します。イメージはGitLabの組み込みコンテナレジストリに保存されます。

試してみる — GitLab CI Config Generator

フルツールを開く