概要
gitlab.comではプライベートなリポジトリが作れる上に、プライベートなDocker Registryも立てられるということで、
github + DockerHubを連携させるような感じで、プライベートな、仲間内で使いまわすようなコンテナを管理したい。
社内にプライベートなDocker Registryを立てようとするも、証明書がオレオレ証明書なのは・・・と躊躇したり、
DockerHubに公開するのも(何らかの事情で)難しい場合には良いと思う。
1か月ぐらい前にチャレンジしたときは動かせなかったのに、今日やったらうまくできた記念。
使うもの
すべて、GitLabさんが提供してくれるものを使う。ローカルリソースは常に枯渇しておるのです。
もの | 説明 |
---|---|
GitLab | Dockerfileなどの資材を管理する |
Gitlab-CI | docker buildやdocker pushを行う。標準で使えるSharedRunnnerを使う |
Registry | Gitlabさんが提供してくれるDockerRegistry |
前提
gitレポジトリには、以下のファイルを置いておきます。
- Dockerfile
- .gitlab-ci.yml (ビルドスクリプト)
- その他Dockerfile内で使用される各種資材
pushのたびにbuildする例
Using the GitLab Container Registryに記載のあるサンプルをもとに作成する。
registry.example.comをregistry.gitlab.comに変えればOK!!!
https://gitlab.com/(ユーザ名かグループ名)/(プロジェクト名)/container_registry
にアクセスし、表示されている内容をメモっておく。
ユーザ名:hoge
プロジェクト名:bar
とした場合は、こんな感じになる。
image: docker:latest
services:
- docker:dind
before_script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
build:
stage: build
script:
- docker build -t registry.gitlab.com/hoge/bar:latest .
- docker push registry.gitlab.com/hoge/bar:latest
tags:
- docker
タグがついたらタグをつけて登録する例
GitLab Documentationに使える変数の一覧があって、
そこにタグを示す値が$CI_BUILD_TAGとあるので、これを使う。
onlyにtagsを設定しておくことで、通常のpushではビルドせず、タグが打たれたらビルドされるようにしておく。
image: docker:latest
services:
- docker:dind
before_script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
tag-build:
stage: build
only:
- tags
- triggers
script:
- docker build -t registry.gitlab.com/hoge/bar:$CI_BUILD_TAG .
- docker push registry.gitlab.com/hoge/bar:$CI_BUILD_TAG
tags:
- docker
確認
ビルドできるDockerfileをpushしたり、タグを打ってみたりして、ビルドされることを確認する。
感想
gitlab + gitlab-ci + gitlab registryで完結しておくと、.gitlab-ci.yml(ビルドスクリプト)もすっきり。
$CI_BUILD_TOKENと書くことで、認証情報をスクリプトや設定ファイル内に平文で書かなくて良いのもすてき。