はじめに
先日公開した コンテナイメージの世代管理を行う の検証を行いました。
実はこの検証の際、裏でもうひとつテーマを実行していました。そのテーマとは
「コンテナイメージのビルド等をローカル環境ではなく、実行をすべて az acr
コマンドでAzure上で実行しよう。」
でした。基本的にすべてコンテナイメージ操作に関するものなのでできるよねと安易に考えていました。たしかにある程度は想像通り簡単にできました。ただ一つ、「タグを追加する」を除いては・・・。一番困難なのは世代管理だと思っていたので意外な展開。
結果としてタグ追加も含めてすべて az acr
コマンドで実現しましたので、今回ご紹介したいと
思います(タグ追加の方法は最後にご紹介)。
az acrコマンドでできること(の一部)
コンテナイメージをビルドする
多くの方がご存知とは思いますが、ACRでコンテナイメージをビルドすることができます。
先日のコンテナイメージ世代管理の例では
az acr build -t sample/hello-world:rel-{{.Run.ID}} -r http://${ACR_NAME}.azurecr.io .
といったコマンドになります。{{.Run.ID}}はACR上のタスクのIDになります。リポジトリ内で一意になるIDですのでタグ付けの際に便利ですね。
タスクを実行する
コンテナイメージのビルドもタスクの1つですが、汎用的にコマンドを実行することができます。それが az acr run
コマンドです。実行するコマンドを別途コンテナイメージとして作成しておくと標準にはない機能も実行できます。
コンテナイメージ世代管理の例では
az acr run --cmd "http://${ACR_NAME}.azurecr.io/acr:1.0.0 purge --ago 30m --filter 'sample/hello-world:rel-*' --dry-run " --registry ${ACR_NAME} /dev/null
といったものです。
コンテナイメージにタグを追加する
最後にタグを追加するものです。ビルド時にタグ名を指定することは上記のビルドコマンドのところでわかります。ではタグだけを後付するには・・・。探しましたがaz acrコマンドでは用意されていないようです。 ここが最後にハマったところ。ネットで探してみたところ Stackoverflowで見つけました。
なるほど。importを使い、sourceとして自身のACRを指定するとできると。
ということで実際にやってみました。
az acr import --name ${ACR_NAME} --source ${ACR_NAME}.azurecr.io/sample/hello-world:rel-ce18 --image sample/hello-world:v1.1.0 --force
これでOKでした。このコマンドを使って、環境を整備して、世代管理の検証も実行。 ローカルでdockerコマンドはまったく使わずにすべてをacr上で実現するという裏テーマも達成。
小ネタですが、こういうことも知っていると便利なこともあるのではと思い紹介させていただきました。