GitLab CI で GitLab Container Registry に push した Docker イメージを使う
GitLab には Docker コンテナレジストリである GitLab Container Registry が統合されています。 GitLab CI は Docker イメージを使って CI を行うので、そこで GitLab Container Registry に push した Docker イメージを使う方法を調べました。
以下の 2 つのリポジトリを使うと仮定します。
- Docker イメージ自体のリポジトリ: gitlab.com/{user}/dockerfile
- Docker イメージを CI で使うリポジトリ: gitlab.com/{user}/dockerfile-user
Docker イメージ自体も CI するのが都合が良いと思うので、別のリポジトリとしています。 もちろん同じリポジトリであっても構いません。
なおこの記事中ではホスティングサービスである gitlab.com を想定しています。
Docker イメージのリポジトリで deploy token を作成する
2018-09-27 追記
同じユーザーのプライベートリポジトリ間、もしくは同じグループのプライベートリポジトリ間では、deploy token なしでも .gitlab-ci.yml
で image: registry.gitlab.com/{user}/dockerfile:latest
とするだけで Container Registry に push した Docker イメージを利用することができました。
GitLab のリポジトリ間の読み取り権限をそのまま利用しているのではないかと思われます。
追記ここまで
Docker イメージ自体のリポジトリ、すなわち Container Registry を有効にしているリポジトリにて、Settings > Repository > Deploy Tokens から deploy token を作成します。
このとき read_registry
にチェックを入れて、Container Registry に対する読み取りアクセスを有効にします1。
作成された認証情報である username と password を後ほど使います。
Docker イメージを使うリポジトリで変数 DOCKER_AUTH_CONFIG
を設定する
GitLab CI でプライベートコンテナレジストリにログインするには、認証情報を変数 DOCKER_AUTH_CONFIG
に設定する必要があります2。
設定する値は、作成した deploy token の username と password を :
(コロン)で連結し、Base64 エンコードしたものです。
base64
コマンドを使うと、次のようなコマンドで Base64 エンコードすることができます。echo
で改行を出力させないために -n
オプションを付けます。
$ echo -n "{username}:{password}" | base64
そして Settings > CI / CD > Variables から DOCKER_AUTH_CONFIG
を設定します。
後は .gitlab-ci.yml
の image
に Container Registry に push した Docker イメージを指定すれば完了です。
image: registry.gitlab.com/{user}/dockerfile:latest
まとめ
GitLab CI で GitLab Container Registry に push した Docker イメージを使う方法を説明しました。
Container Registry のリポジトリで read_registry
権限のある deploy token を作成し、CI を行うリポジトリで deploy token を Base64 エンコードしたものを変数 DOCKER_AUTH_CONFIG
に設定することで利用できます。
2018-09-27 追記
同じユーザーまたは同じグループのリポジトリでは、deploy token は必要なく、registry.gitlab.com
から始まる Docker イメージをそのまま利用できるようです。