このエントリは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