前回は、Azureポータルの「コンテナーインスタンス」ブレードを使用して「Azure Container Instances(ACI)」を利用したLinuxまたはWindowsコンテナのデプロイについて説明しました。今回は、Azure CLIまたはAzure PowerShellを使用したコマンドライン操作によるデプロイ手順について説明します。前回と同様に、Docker公式イメージを利用した最もシンプルなデプロイ手順で説明します。詳細については、以下の公式ドキュメントで確認してください。
Azure CLIとAzure PowerShellを利用可能なCloud Shellも実はコンテナ
Azure CLIやAzure PowerShellは、ローカルコンピューターにインストールすることもできますが、Azureポータルで無料で利用できる「Cloud Shell」が便利です。Cloud Shellには「Bash」と「PowerShell」の2種類の環境がありますが、そのどちらでもAzure CLIとAzure PowerShellを利用可能です。
「PowerShell」のほうは既定でPowerShell(pwsh)のシェルが自動開始されているだけです。余談ですが、実はこのCloud Shellはコンテナ技術の応用例であり、Linuxコンテナで実現されています。以前は「PowerShell」はWindowsコンテナで実現されていましたが、PowerShell Coreの一般提供を受けて、起動が早く軽量なLinuxコンテナに統一されました。
Azure CLIによるACIへのコンテナのデプロイ
前回はAzureポータルでLinuxコンテナをデプロイしたので、今回はWindowsコンテナを例にしましょう。使用するイメージは、マイクロソフトが提供するWindows IISイメージの「mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016」を使用します。
このイメージは、Windows Server 2016のServer CoreのベースOSイメージ「mcr.microsoft.com/windows/servercore:ltsc2016」にIISの役割を追加したものです。
次のAzure CLIのコマンドラインは、「東日本」(Japaneast)リージョンにリソースグループ「mywscontainerRG」を新規に作成し、コンテナ名「mywsiis1905」、イメージ「mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016」、OSの種類「Windows」、DNS名ラベル「mywsiis1905」、TCPポート「80」でWindowsコンテナをデプロイします。
前回も説明しましたが、日本では「東日本」リージョンでのみACIがサービスされています。「西日本」リージョンは選択できません。
az group create --name mywscontainerRG --location japaneast
az container create --name mywsiis1905 --image mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016 --os-type Windows --resource-group mywscontainerRG --dns-name-label mywsiis1905 --ports 80
これも前回触れましたが、Windowsコンテナはサイズが大きく(展開後のサイズは10GB以上)、起動にも時間がかかるため(Hyper-V分離モードのHyper-Vコンテナとして実行されるため)、デプロイが完了するまでしばらく時間がかかります。筆者が試したときは15分以上かかりました。WebブラウザでFQDNまたはIPアドレスを開くと、IISの既定のWebサイトが表示されます。
ACIからデプロイ済みのコンテナーインスタンスをクリーンアップするには、次のコマンドラインでコンテナーインスタンスを削除し、続いてリソースグループを削除します。
az container delete --resource-group mywscontainerRG --name mywsiis1905
az group delete --resource-group mywscontainerRG
前回、Azureポータルで「nginx」をデプロイしたのと同じことをAzure CLIで実行するコマンドラインで見ていただいた方が対応が分かりやすいかもしれません。Linuxコンテナの場合、1分程度でデプロイが完了します。
az group create --name mylinuxcontainerRG --location japaneast
az container create --name mynginx1905 --image nginx --os-type Linux --resource-group mylinuxcontainerRG --dns-name-label mynginx1905 --ports 80
az container delete --resource-group mylinuxcontainerRG --name mynginx1905
az group delete --resource-group mylinuxcontainerRG
Azure PowerShellによるACIへのコンテナのデプロイ
先ほど、Azure CLIでWindowsコンテナをデプロイしたのとまったく同じことを、Azure PowerShellを使用して行うには、次のコマンドラインを実行します。
New-AzResourceGroup -Name mywscontainerRG -Location japaneast
New-AzContainerGroup -ResourceGroupName mywscontainerRG -Name mywsiis1905 -Image mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016 -OsType Windows -DnsNameLabel mywsiis1905 -port 80
デプロイ済みのコンテナインスタンスのクリーンアップには、次のコマンドラインを実行します。
Remove-AzContainerGroup -ResourceGroupName mywscontainerRG -Name mywsiis1905
Remove-AzResourceGroup -Name mywscontainerRG
Windowsコンテナのサポートの制約
Windows ServerにおけるDockerコンテナ技術のサポートは、Windows Server 2016で初めて提供されました。その後、Windows Serverの半期チャネル(SAC)が始まり、機能の改善や強化、イメージサイズの縮小などが進められ、その成果は最新の長期サービスチャネル(LTSC)であるWindows Server 2019に実装されています。
Windows Serverでは、コンテナホストと同じバージョン(ビルド)のServer CoreまたはNano Serverイメージを「プロセスモード」で、コンテナホストと同一、および下位バージョン(ビルド)をHyper-V分離モードで実行できます。
プロセスモードはホストのカーネルを共有するLinuxコンテナホスト/Linuxコンテナと同様のモードでWindows Serverコンテナとも呼ばれます。Hyper-V分離モードは、コンテナがHyper-Vの仮想環境でコンテナごとに用意されるカーネルを共有するモードでHyper-Vコンテナとも呼ばれます。
下表に2019年5月末時点において、Web App for ContainersおよびACIでサポートされるWindowsコンテナのイメージのバージョンをまとめました。Web App for Containersは、2019年3月にWindows Server 2016ベースからWindows Server 2019ベースに基盤が置き換えられ、複数のバージョンのWindowsコンテナをサポートするようになりました(ただし、Windowsコンテナのサポートはプレビュー)。
一方、ACIのWindowsコンテナ用の基盤は長くWindows Server 2016ベースで提供され、Windows Server 2016バージョンのベースOSイメージおよび、そのベースOSイメージから作成されたイメージのみを正式にサポートしています。
2019年5月からはACIにおいてWindows Server 2019バージョンのベースOSイメージをプレビューとしてサポートすることが発表されました。Windows Server 2016のNano Serverは2018年10月にサポートが終了し、イメージの更新が停止されていることに注意してください。事実上、ACIではWindows Server 2016 Server Coreベースのイメージのみを運用環境として利用可能です。
なお、Windows Server 2019ではKubernetesのサポートが追加されており、「Azure Kubernetes Service(AKS)」のKubernetesクラスタでも2019年5月よりWindows Server 2019ノードの追加およびWindowsコンテナのデプロイがプレビューとしてサポートされるようになりました。
運用環境では、引き続きLinuxコンテナのみがサポートされます。WindowsコンテナをKubernetesクラスタに直接デプロイせず、ACIとの連携機能を利用して間接的にWindowsコンテナに対応することも可能です。
著者プロフィール
山市良
Web媒体、IT系雑誌、書籍を中心に執筆活動を行っているテクニカルフリーライター。主にマイクロソフトの製品やサービスの情報、新しいテクノロジを分かりやすく、正確に読者に伝えるとともに、利用現場で役立つ管理テクニックやトラブルシューティングを得意とする。2008年10月よりMicrosoft MVP - Cloud and Datacenter Management(旧カテゴリ: Hyper-V)を連続受賞。ブログはこちら。
主な著書・訳書
「インサイドWindows 第7版 上」(訳書、日経BP社、2018年)、「Windows Sysinternals徹底解説 改定新版」(訳書、日経BP社、2017年)、「Windows Server 2016テクノロジ入門 完全版」(日経BP社、2016年)、「Windows Server 2012 R2テクノロジ入門」(日経BP社、2014年)などがある。