Azure Container RegistryとDocker Hubの間でイメージをやりとりしたい

このエントリは2021/01/14現在の情報に基づいています。将来の機能追加・変更に伴い、記載内容との乖離が発生する可能性があります。

先日、以下のような問い合わせをもらった。

Docker HubにあるイメージをAzure Container Registry (以後ACR) にインポートしたり、ACRのイメージをDocker Hubにエクスポートしたい。

ACRへのインポートは以下のドキュメントに記載されているが、色々なオプションを取り得るので、このエントリはその備忘録として記載している。

コンテナー レジストリにコンテナー イメージをインポートする / Import container images to a container registry
https://docs.microsoft.com/azure/container-registry/container-registry-import-images

Docker Hub(やその他のパブリックレジストリ)から直接インポート

これは上記ドキュメントにある通り。dockerコマンドを使わないので、dockerコマンドのインストールが不要(Azure CLIのインストールは必要だが)。

az acr import \
  --name myregistry \
  --source docker.io/library/hello-world:latest \
  --image hello-world:latest

tarファイルにエクスポートしてからインポート

もちろん、dockerコマンドを使ってtarにエクスポートしてからインポートすることもできる。これはDocker Hub以外にも、ACRに対しても同様の方法で可能。

docker export
https://docs.docker.com/engine/reference/commandline/export/
docker import
https://docs.docker.com/engine/reference/commandline/import/

# "/home/logico_jp" is current directory
$ docker export red_panda > latest.tar
$ docker import /home/logico_jp/latest.tar

docker importはHTTP(S)アクセスも可能なので、もしHTTP(S)でアクセスできるのであれば、以下のようなこともできる。

$ docker import http://example.com/exampleimage.tgz

ACRから直接Docker Hubへエクスポート

ACRで提供されているコマンド(というか、Azure CLI)では外部レジストリに直接エクスポートする機能は用意されていない。そもそもそれが必要なら、エクスポート先からインポートコマンドを発行したまえ、というお話なのだが、ACRからDocker Hubへは、tarファイルを介したやりとりをせざるを得ない(もちろん、ローカルにインポートして、それをDocker Hubにプッシュしてもいい)。

その他

プライベートレジストリから直接インポート

これは以下のドキュメントに記載の通り、ユーザーとパスワードを指定する必要がある。Docker Hubのプライベートイメージを対象にする場合も、この方式を利用する。

Azure 以外のプライベート コンテナー レジストリからインポートする / Import from a non-Azure private container registry
https://docs.microsoft.com/azure/container-registry/container-registry-import-images#import-from-a-non-azure-private-container-registry

az acr import \
  --name myregistry \
  --source docker.io/sourcerepo/sourceimage:tag \
  --image sourceimage:tag \
  --username <username> \
  --password <password>

この方法は、異なるAzure AD配下にあるACRからのインポートにも応用できる(この場合は、Service Principalのユーザー、パスワードが必要)。詳細は以下。

別の AD テナント内の Azure コンテナー レジストリからインポートする / Import from an Azure container registry in a different AD tenant
https://docs.microsoft.com/azure/container-registry/container-registry-import-images#import-from-an-azure-container-registry-in-a-different-ad-tenant

事業継続および災害対策のために別リージョンに配置したACRにも、インポートしたイメージを伝播したい

これはまさに以下のドキュメントに記載の通りで、Premium tierを使えばgeoレプリケーションが利用できる。これにより、別のACRをレプリカとして構成すれば、1カ所のACRをメンテナンスするだけでイメージを伝播できる。

Azure Container Registry の geo レプリケーション / Geo-replication in Azure Container Registry
https://docs.microsoft.com/azure/container-registry/container-registry-geo-replication

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中