Docker for WindowsでインストールレスAzure CLI 2.0環境を作る

Posted on Feb 28, 2017

Azure CLI 2.0版です

Docker for WindowsでインストールレスAzure CLI環境を作る、のAzure CLI 2.0版です。Azure CLI 2.0の一般提供開始に合わせて書いています。

動機

  • Docker for Windows、もっと活用しようぜ
  • がんがんアップデートされるAzure CLI2.0をいちいちインストールしたくない、コンテナ引っ張って以上、にしたい
  • 開発端末の環境を汚したくない、いつでもきれいに作り直せるようにしたい
  • WindowsでPythonのバージョン管理するのつらくないですか? コンテナで解決しましょう
  • ○○レスって言ってみたかった

やり口

  • もちろんDocker for Windows (on Client Hyper-V) を使う
  • いちいちdocker run…と打たなくていいよう、エイリアス的にPowerShellのfunction “az_cli” を作る
  • “az_cli"入力にてAzure CLIコンテナを起動
  • コンテナとホスト(Windows)間でファイル共有、ホスト側のIDEなりエディタを使えるようにする

作業の中身

  • Docker for Windowsをインストール
    • 64bit Windows 10 Pro/Enterprise/Education 1511以降に対応
    • Hyper-Vの有効化を忘れずに
    • Hyper-VとぶつかるVirtualBoxとはお別れです
    • モードをLinuxにします。タスクトレイのdockerアイコンを右クリック [Switch to Linux containers]
    • ドライブ共有をお忘れなく。 タスクトレイのdockerアイコンを右クリック [settings] > [Shared Drives]
  • PowerShell functionを作成
    • のちほど詳しく

PowerShellのfunctionを作る

ここが作業のハイライト。

PowerShellのプロファイルを編集します。ところでエディタはなんでもいいのですが、AzureやDockerをがっつり触る人にはVS Codeがおすすめです。Azure Resource Manager TemplateDockerむけextensionがあります。

PS C:\Workspace\ARM> code $profile

こんなfunctionを作ります。

function az_cli {
   C:\PROGRA~1\Docker\Docker\Resources\bin\docker.exe run -it --rm -v ${HOME}/.azure:/root/.azure -v ${PWD}:/data -w /data azuresdk/azure-cli-python
}
  • エイリアスでなくfunctionにした理由は、引数です。エイリアスだと引数を渡せないので
  • コンテナが溜まるのがいやなので、–rmで都度消します
  • 毎度 az login しなくていいよう、トークンが保管されるコンテナの/root/azureディレクトリをホストの${HOME}/.azureと-v オプションで共有します
  • ARM TemplateのJSONファイルなど、ホストからファイルを渡したいため、カレントディレクトリ ${PWD} をコンテナと -v オプションで共有します
  • コンテナはdocker hubのazuresdk/azure-cli-pythonリポジトリ、latestを引っ張ります。latestで不具合あればバージョン指定してください

ではテスト。まずはホスト側のファイルを確認。

PS C:\Workspace\ARM> ls


    ディレクトリ: C:\Workspace\ARM


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2017/02/28      8:29           4515 azuredeploy.json
-a----       2017/02/28      8:30            374 azuredeploy.parameters.json

いくつかのファイルがあります。

コンテナを起動してみましょう。az_cli functionを呼びます。

PS C:\Workspace\ARM> az_cli
bash-4.3#

コンテナを起動し、入出力をつなぎました。ここからは頭と手をLinuxに切り替えてください。Azure CLI 2.0コンテナはalpine linuxベースです。

カレントディレクトリを確認。

bash-4.3# pwd
/data

ファイル共有できているか確認。

bash-4.3# ls
azuredeploy.json             azuredeploy.parameters.json

できてますね。

azコマンドが打てるか確認。

bash-4.3# az --version
azure-cli (2.0.0+dev)

acr (0.1.1b4+dev)
acs (2.0.0+dev)
appservice (0.1.1b5+dev)
batch (0.1.1b4+dev)
cloud (2.0.0+dev)
component (2.0.0+dev)
configure (2.0.0+dev)
container (0.1.1b4+dev)
core (2.0.0+dev)
documentdb (0.1.1b2+dev)
feedback (2.0.0+dev)
iot (0.1.1b3+dev)
keyvault (0.1.1b5+dev)
network (2.0.0+dev)
nspkg (2.0.0+dev)
profile (2.0.0+dev)
redis (0.1.1b3+dev)
resource (2.0.0+dev)
role (2.0.0+dev)
sql (0.1.1b5+dev)
storage (2.0.0+dev)
taskhelp (0.1.1b3+dev)
vm (2.0.0+dev)

Python (Linux) 3.5.2 (default, Dec 27 2016, 21:33:11)
[GCC 5.3.0]

タブで補完も効きます。

bash-4.3# az a
account     acr         acs         ad          appservice

しあわせ。