マルチアーキテクチャのコンテナイメージをコピーする skopeo

TL;DR

skopeo

skopeo は OCI アーティファクトを操作する CLI です。 Podman で有名な containers で管理されており Red Hat でも紹介されているため信頼できるツールと言えます。

Skopeo とは

Skopeo の仕組み

Skopeo (ギリシャ語で「リモートビューイング」) は、Red Hat のエンジニアがオープンソース・コミュニティと共に開発した最初のコンテナツールです。

コピー

例 1

以下、東京リージョンの ECR イメージを大阪リージョンにコピーする例です。

大阪リージョン、東京リージョンでそれぞれ ECR のための(Docker)認証情報を取得し、docker login と同じように skopeo に読み込ませます。

手元の MAC では ~/.config/containers/auth.json に保持されていました。ドキュメントによると skopeo login しなければ $HOME/.docker/config.json を見に行ってくれるらしいです。

skopeo copy コマンドでコピー元の ECR イメージと、コピー先の ECR リポジトリを指定します。 –all オプションを指定することで、マルチアーキテクチャのイメージをコピーします。

$ aws ecr get-login-password --region ap-northeast-1 | skopeo login --username AWS --password-stdin account.dkr.ecr.ap-northeast-1.amazonaws.com
$ aws ecr get-login-password --region ap-northeast-3 | skopeo login --username AWS --password-stdin account.dkr.ecr.ap-northeast-3.amazonaws.com
$ skopeo copy docker://account.dkr.ecr.ap-northeast-1.amazonaws.com/amazonlinux:multi-arch  docker://account.dkr.ecr.ap-northeast-3.amazonaws.com/amazonlinux:latest --all

docker を使う場合、pull して push する手順を踏む必要があります。また、docker pull はホストの  CPU アーキテクチャのイメージを自動で pull するため、マルチアーキテクチャのイメージをコピーするのが苦手です。skopeo で –all オプションを使った方がお手軽です。

例 2

Docker レジストリのイメージを ECR にコピーする例

$ aws ecr get-login-password --region ap-northeast-1 | skopeo login --username AWS --password-stdin account.dkr.ecr.ap-northeast-1.amazonaws.com

$ skopeo copy docker://docker.io/library/amazonlinux:latest  docker://account.dkr.ecr.ap-northeast-3.amazonaws.com/amazonlinux:latest --all

その他

sync コマンドもあるようなので、リポジトリの複数のイメージをコピーする場合はこっちが便利かもしれません(未検証)。