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の組み込みコンテナレジストリに保存されます。