毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。
0. はじめに
GitLab.comのコンテナーレジストリーに保存されたDockerイメージをHarborでレプリケーションしようとしました。
Google先生に聞いてもドキュメントが少なく、いろいろと突っ掛かってしまったので備忘録的に書き留めておきます。
1. 前提条件
Harborのバージョン: Version v2.3.3-a0a9ed8a
Harborの実行Kubernetes: k3s version v1.19.15+k3s2 (0fbbc5af)
GitLabのバージョン: GitLab Enterprise Edition 14.4.0-pre(オンプレのGitLab CE,EEでも恐らく大丈夫)
1. GitLab.com側の準備
以下のURLでパーソナルアクセストークンを発行する
パーソナルアクセストークン · ユーザー設定 · GitLab
https://gitlab.com/-/profile/personal_access_tokens
パーソナルアクセストークンを発行するときのポイントは、Select scopes
を以下の2つを付与します。
- read_api
- read_registry
※今回は、GitLab.com --> オンプレHarborへのレプリケーションだったので、「write_registry」は付けませんでした。
オンプレHarbor --> GitLab.com(またはGitLab)の場合は、write_registryにもチェックを付けてください。
2. Harbor側の設定
2-1. Registryへ登録
Endpointを登録します。
- Providerは
Gitlab
を選択 - Nameは任意
- Endpoint URLを
https://registry.gitlab.com
にします - Access IDには、1で取得したパーソナルアクセストークンのIDを入れます
- Access Secretには、1で取得したパーソナルアクセストークンのSecretをいれます
「TEST CONNECTION」をクリックして接続できることを確認します。
2-2. レプリケーション設定
レプリケーションを作成します。
「NEW REPLICATION RULE」をクリックして、ダイアログに「Name」を入力して「Replication mode」をPull-based
に変更します。
Source registryに、registry.gitlab.comを選択します。
Source resouce filterは、レプリケーションしたいプロジェクト配下のリポジトリ名を指定します。
Nameの指定方法は、<プロジェクト名>/<レジストリ名>/<イメージ名>
で指定します。
Tagの指定方法は、latest等の特定のTagを指定する方法もありますが、ワイルドカードで指定するには**を使います。
GitLab Container Registryで、ディレクトリがネストしている場合は、以下のようにします。
<プロジェクト名>/<レジストリ名>/<イメージ名>/<ディレクトリ名>/**
また、レジストリ配下のコンテナイメージを全て取得する場合は、以下のようにします。
<プロジェクト名>/<レジストリ名>/**
Nameで指定するのは、コンテナー名までです。イメージ名の:
以降のタグは、Tag:に記載します。
こちらもワイルドカードは **
です。
レプリケーション先をDestination
で指定します。
3. レプリケーションの実行
レプリケーションを保存したらレプリケーションしたいルールを選択して「REPLICATE」ボタンをクリックします。