Docker で Azure CLI をはじめる
この記事について
Microsoft Azure で開発や検証をする際、コマンドラインインターフェース (CLI) として Azure CLI
を使う機会は多いと思います。
ただ、通常だと、Azure CLI は Windows や macOS に直接インストールして使うことになるので、ホスト OS を汚したくない、Docker 大好きな私にとっては、ホスト OS に Azure CLI をインストールすること自体にかなり抵抗がありました。
Azure CLI は、Docker コンテナー上で動作させることも可能であり、Microsoft 社が公式に Docker イメージを提供していたりします。
そのため、今回は公式に提供されている Docker イメージを使用して、Docker コンテナー上で Azure CLI を動かすことをやっていこうと思います。
コンテナー環境については、Docker Compose を使用してコード管理できるようにします。
Docker Hub
公式の Docker イメージは、以下のサイトで公開されています。
Azure CLI on Docker の作成
以下のような docker-compose.yaml
を準備して、docker-compose up -d
をするだけで、Azure CLI が実行可能な Docker コンテナーを用意できます。
version: '3'
services:
azurecli:
image: mcr.microsoft.com/azure-cli:latest
container_name: azure-cli
tty: true
volumes:
- ${HOME}/.ssh:/root/.ssh
- ./scripts:/home
working_dir: "/home"
docker-compose up -d
コマンドを実行したら、コンテナーの起動状況を確認します。State
が Up
になっていれば OK です。
docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------
azure-cli /bin/sh -c bash Up
Azure CLI の起動
コンテナーが起動したら、コンテナーの中から Azure CLI を起動します。
コンテナーの中に入って操作を行いたい場合
docker ps
を実行して、コンテナー ID を取得した後、Docker コンテナーの中に入ります。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cf2ad69525f5 mcr.microsoft.com/azure-cli:latest "/bin/sh -c bash" 4 hours ago Up 4 hours azure-cli
この例でいうと、cf2ad69525f5
が Azure CLI が入っている Docker コンテナーの ID になるため、この ID を使用してコンテナーの中に入ります。
docker exec -it cf2ad69525f5 "bash"
ここで、通常であれば、Microsoft Docs などでよく見る az login
コマンドを実行して Azure にログインするわけですが、1 点注意したいのは、Docker コンテナー内には Web ブラウザーがないということです。
Azure CLI はこの点も考慮されており、ブラウザーが開けない場合は、リモートログインができるように設計されています。
az login
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code HKH7D6WXV to authenticate.
このような表示が出るので、記載の URL にホスト OS 側にある Web ブラウザーなどでアクセスし、認証コードを入れた上で、リモートログインを実施することができるようになっています。
これは、az login
の --use-device-code
オプションの動作になります。
サインイン方法の詳細については、以下の Microsoft Docs 記事を参照してください。
ログインができたら、あとは他と同じように利用できます。
Docker コンテナーの外から操作を行いたい場合
Azure リソースをセットアップするためのスクリプトを組んでいる時などは、外から docker-compose run
を使用してコマンド実行することも可能です。
./scripts
フォルダ以下に任意のスクリプトを配置して、以下のコマンドを実行することで、Docker コンテナー内でスクリプトを起動できます。
docker-compose run --rm azurecli <hogehoge.sh>
実際にスクリプトの実行が完了すると、コンテナー内は初期化されるため、永続化したいファイルなどは、docker-compose.yaml
内の volumes
にて、追加でディレクトリの設定を行うといいと思います。
まとめ
CLI も今や Docker で動かせる時代になりました。ホスト OS にいろんなものを直接インストールしているが故に、ソフトウェア間の依存関係に悩まされてしまうことは多々ありますが、それらの多くは時間の無駄に直結しています。
特に CLI というものは、他のツールなどに比べると、アップデートやダウングレードなどのバージョン管理が面倒だったり、バージョン更新によって動作がおかしくなったりすることが発生しやすいものでもあると思います。
その点、Azure CLI を Docker コンテナー上で動かすようにしてしまえば、集団での開発作業などでも実行環境の統一ができ、最新バージョンにアップデートする時もコンテナーを pull しなおすだけで OK になります。
この機会に、CLI も Docker で動かす習慣をつけてみるといいと思います。
Discussion