Container Registry は、Alibaba Cloud が提供する、コンテナイメージ管理のためのサービスです。 世界中の 20 のリージョンでイメージのライフサイクル管理をサポートします。 Container Service は、Container Service などの他の Alibaba Cloud サービスと統合された、コンテナーイメージを管理するためのワンストップクラウドネイティブサービスを提供します。 このトピックでは、image-syncer を使用して、自作 Harbor から Container Registry Default Instance Edition にイメージを同期する方法について説明します。

始める前に

Container Registry サービスが有効化されます。

Container Registry コンソールにログインして、Container Registry サービスを有効化します。

名前空間の作成

名前空間を使用すると、リポジトリのアクセス権限やリポジトリの属性など、一連のリポジトリを効率的に管理できます。 名前空間用の [リポジトリの自動作成] を有効にできます。 docker push コマンドを実行して名前空間に存在しないリポジトリにイメージをプッシュすると、リポジトリが自動的に作成されます。
docker push コマンドを使用して作成された対象のリポジトリは、名前空間のデフォルトリポジトリタイプの設定に基づいて、パブリックまたはプライベートにすることができます。
  1. Container Registry コンソールにログインします。
  2. 左側ナビゲーションウィンドウで、[デフォルトインスタンス] > [名前空間]を選択します。
  3. 名前空間ページで、右上隅にある [名前空間の作成] をクリックします。
  4. 名前空間の作成ダイアログボックスで、名前空間をカスタマイズし、[確定] をクリックします。

名前空間を作成後、名前空間ページで表示されます。 名前空間 ページでネームスペースを管理することもできます。

RAM ユーザーへの権限付与

Resource Access Management (RAM) ユーザーとして後続の操作を実行する場合、RAM ユーザーを作成し、RAM ユーザーにアクセス権限を付与する必要があります。 Alibaba Cloud アカウントを使用して後続の操作を実行する場合は、このセクションをスキップしてください。

  1. RAM ユーザーを作成します。 詳細については、「RAM ユーザーとしての Container Service コンソールの使用」をご参照ください。
  2. RAM ユーザーに関連した権限の付与 詳細については、「カスタム権限ポリシーの作成」をご参照ください。
    この例では、RAM ユーザーに対する作成、更新、プッシュ、およびプルの権限のみを付与し、アクセス可能なリソースを image-syncer 名前空間に設定します。
    {
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "cr:CreateRepository",
                    "cr:UpdateRepository",
                    "cr:PushRepository",
                    "cr:PullRepository"
                ],
                "Resource": [
                    "acs:cr:*:*:repository/image-syncer/*"
                ]
            }
        ],
        "Version": "1"
    }

アクセス資格情報の設定

プライベートイメージをプルするか、イメージをアップロードする前に、docker login コマンドを実行して、アクセス資格情報を使用してレジストリにログインする必要があります。 以下の手順に従って、アクセス資格情報を設定します。

  1. 左側ナビゲーションウィンドウで、[デフォルトインスタンス] > [アクセス資格情報]をクリックします。
  2. アクセス資格情報ページで [パスワードの設定] をクリックします。
  3. [パスワードの設定] ダイアログボックスで [パスワード][パスワードの確認] を設定し、[OK] をクリックします。

image-syncer の設定

この例では、自作 Harbor レジストリの library/nginx リポジトリ内のイメージを、中国 (北京) リージョンの Container Registry の image-syncer 名前空間に同期します。 同期元リポジトリの名前 (nginx) は、同期先リポジトリの名前として使用されます。 設定ファイルは次のとおりです。
{
    "auth": {
        "harbor.myk8s.paas.com:32080": {
            "username": "admin",
            "password": "xxxxxxxxx",
            "insecure": true
        },
        "registry.cn-beijing.aliyuncs.com": {
            "username": "acr_pusher@1938562138124787",
            "password": "xxxxxxxx"
        }
    },
    "images": {
        "harbor.myk8s.paas.com:32080/library/nginx": ""
    }
}
  • harbor.myk8s.paas.com:32080 : 自作 Harbor レジストリのエンドポイント。 実際の値に置き換える必要があります。
    • username : 自作 Harbor レジストリのユーザー名。 この例では、値は admin です。
    • password : 自作 Harbor レジストリのパスワード。
    • insecure : このパラメーターを true に設定します。
  • registry.cn-beijing.aliyuncs.com : 同期先レジストリのエンドポイント。 この例では、レジストリは中国 (北京) リージョンにあります。
    • username : アクセス資格情報のユーザー名。
    • password : アクセス資格情報のパスワード。
  • "harbor.myk8s.paas.com:32080/library/nginx": "":harbor.myk8s.paas.com:32080 の library/nginx レポジトリにアクセスします。

image-syncer を使用したイメージ同期

  1. image-syncer の最新のインストールパッケージをダウンロードします。
    現在、Linux AMD64 バージョンのみがサポートされています。
  2. image-syncer をインストールして設定します。
    詳細については、 GitHub のガイドラインをご参照ください。
  3. 次のコマンドを実行し、イメージを同期します。
    #デフォルトの同期先レジストリを registry.cn-beijing.aliyuncs.com に設定し、デフォルトの同期先名前空間を image-syncer に設定します。
    #同時に同期できるイメージの数と最大再試行回数の両方を 10 に設定します。
    #./log ファイルにログを記録します。 ファイルが存在しない場合は自動的に作成されます。 ログファイルが指定されていない場合、image-syncer はデフォルトで Stderr にログを表示します。
    #設定ファイルとして harbor-to-acr.json を指定します。 その内容は前途のセクションで説明のとおりです。
    ./image-syncer --proc=10 --config=./harbor-to-acr.json --registry=registry.cn-beijing.aliyuncs.com --namespace=image-syncer --retries=10 --log=./log

同期結果

イメージを同期するとき、image-syncer は同期タスクを生成し、同期タスクを実行し、失敗したタスクを再試行します。 失敗したタスクには、実行に失敗した同期タスクと、生成に失敗した同期タスクが含まれます。 各同期タスクは、指定されたタグでイメージを同期します。 設定ファイルのイメージ同期ルールでタグが指定されていない場合、image-syncer は元のタグをすべて保持することにより、このルールに基づいて同期タスクを生成します。

  • イメージが正常に同期されると、次の図に示すメッセージが表示されます。成功結果
  • たとえば、ユーザー名またはパスワードが正しくないためにイメージの同期に失敗すると、次の図に示すメッセージが表示されます。失敗結果
  • 次の図に示すように、実行中に image-syncer はログ情報を表示します。ログ情報