🍙
PodmanでAzure Container Registry (ACR)間のコンテナイメージを移行する
はじめに
本記事では,PodmanとAzure CLIを使用してAzure Container Registry (ACR)間でコンテナイメージを移行する手順を記しています.この作業がややこしかったので,備忘録として残します.
なぜPodman?
Dockerライセンスの制限
Docker Desktop は2021年8月31日以降,以下の条件で商業利用に有料ライセンスが必要になりました:
- 企業規模: 従業員250人以上の企業
- 年間売上: 1000万ドル以上の企業
- 政府機関: 政府系組織
これらの条件に該当する組織では,Docker Desktop の商業利用にDocker Pro,Team,またはBusinessライセンス(月額5ドル〜)が必要です.
Podmanの優位性
Podman(Pod Manager) はRed Hatが開発したオープンソースのコンテナエンジンで,以下の利点があります:
- 完全無料: 商業利用でもライセンス費用が不要
- Docker互換: Dockerコマンドとほぼ同じ構文で使用可能
- デーモンレス: バックグラウンドサービスが不要でセキュリティ面で優秀
- ルートレス実行: root権限なしでコンテナを実行可能
- Kubernetesネイティブ: Pod概念をサポート
というわけで,Podmanを使用しております.
以下本題です.
前提条件
- Azure CLI がインストール済み
- Podman がインストール済み
- 適切なAzureサブスクリプションへのアクセス権限
- 移行元・移行先のACRへのアクセス権限
手順
以下,Azure Container RegistryはACRと略します.
1. Azureテナントにログイン
特定のテナントを指定してログインします:
az login --tenant <tenant-id>
例:
# ドメイン名
az login --tenant contoso.onmicrosoft.com
# または テナントID
az login --tenant 12345678-1234-1234-1234-123456789012
ログイン後,適切なサブスクリプションが選択されていることを確認してください:
※ 多分ログイン時にサブスクリプションを聞かれると思います.
az account show
必要に応じてサブスクリプションを変更:
az account set --subscription <subscription-id>
2. 利用可能なACRを確認
az acr list --output table
移行元と移行先のACR名を確認します.
3. 移行元ACRにログインしてトークンを取得
az acr login -n <source-acr-name> --expose-token
例:
az acr login -n sourceacr123 --expose-token
これでとても長いアクセストークンが出力されます.
他にも出力されますが,とりあえず使うのはアクセストークンのみです.
出力されたアクセストークンをコピーしておきます.
4. 移行先ACRにPodmanでログイン
podman login <destination-acr-name>.azurecr.io -u 00000000-0000-0000-0000-000000000000 -p <access-token>
例:
podman login destinationacr456.azurecr.io -u 00000000-0000-0000-0000-000000000000 -p eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiI...
5. 移行元ACRからイメージをPull
podman pull <source-acr-name>.azurecr.io/<repository>/<image-name>:<tag>
Pull用のコマンドはACR上で確認することができます.
Docker Pullコマンドが記されていますので,dockerの部分をpodmanに変えればOKです.
例:
podman pull sourceacr123.azurecr.io/my-project/web-app:v1.0.0
6. 移行先ACR用にイメージをタグ付け
podman tag <source-acr-name>.azurecr.io/<repository>/<image-name>:<tag> <destination-acr-name>.azurecr.io/<repository>/<image-name>:<tag>
例:
podman tag sourceacr123.azurecr.io/my-project/web-app:v1.0.0 destinationacr456.azurecr.io/my-project/web-app:v1.0.0
7. 移行先ACRにイメージをPush
podman push <destination-acr-name>.azurecr.io/<repository>/<image-name>:<tag>
例:
podman push destinationacr456.azurecr.io/my-project/web-app:v1.0.0
確認
移行完了後,以下のコマンドで正常にプッシュされたことを確認できます:
# ローカルのイメージ一覧を確認
podman images | grep <destination-acr-name>
# Azure CLI でACRのリポジトリを確認
az acr repository list --name <destination-acr-name>
もしくはAzure Portalで直接確認します.
注意点
- 移行元ACRからのpullには適切な読み取り権限が必要です
- 移行先ACRへのpushには適切な書き込み権限が必要です
- 大きなイメージの場合,ネットワーク状況によっては時間がかかる場合があります
- 複数のイメージを移行する場合は,手順5~7を繰り返してください(1~4のログイン手順は一回だけでOK)
トラブルシューティング
認証エラーが発生した場合
-
az loginで再度ログインしてください - 正しいサブスクリプションが選択されていることを確認してください
- ACRへのアクセス権限を確認してください
接続エラーが発生した場合
- Podmanが正常に起動していることを確認してください
-
podman machine startでPodman VMを起動してください
Discussion