連載の第27回では、Azure App Serviceの「Web App for Containers」を紹介しました。今回はサーバレスのDocker環境を提供する「Azure Container Instances(ACI)」について紹介します。

コンテナ技術に基づいたWebアプリの開発とデプロイもAzureにお任せ

連載の第27回では、Azure App Serviceの「Web App for Containers」を紹介しました。Web App for Containersは、Dockerベースで作成したカスタムイメージやDocker公式イメージを使用してWebアプリをデプロイすることができる、LinuxまたはWindows(Windowsはプレビュー)のDockerコンテナホスト環境を提供するものです。

マイクロソフトは、Webアプリの開発とデプロイの環境として次第に存在感が増してきたDockerのコンテナ技術に対して数年前から対応を進めてきました。Windows Server 2016では、Dockerとの協力により、標準のサーバの機能として「コンテナ」が追加され、商用のDockerエンジンである「Docker Enterprise for Windows Server」とともにWindowsベースのコンテナの作成と実行が可能になりました。

Azureでは、2017年7月にサーバレスのDocker環境を提供する「Azure Container Instances(ACI)」のプレビュー提供を開始し、2018年4月に一般提供が開始されています。

さらに、2018年6月にはLinuxベースのKubernetesクラスタの作成と管理、クラスタへのLinuxコンテナのデプロイと操作を可能にするフルマネージドサービス「Azure Kubernetes Service(AKS)」の一般提供が始まりました。

なお、以前はDC/OSやDocker Swarmに対応したフルマネージドサービス「Azure Container Service(ACS)」がありましたが、現在はAKSに置き換えられました。ACSのサービスは現在でも利用可能ですが、2020年1月31日に廃止される予定です。

ACIは、サーバレスかつ分かりやすい価格(メモリとvCPUの秒単位の使用に対する課金)で利用できるフルマネージドサービスであり、LinuxコンテナまたはWindowsコンテナのデプロイと実行に対応しています。

AKSのクラスタ作成時の容量を超える負荷が発生した際に、ACIを一時的に利用してスケールをバーストするという使い方もできます。なお、ACIにおけるWindowsコンテナは、現状Windows Server 2016 Server Coreイメージをベースとしたコンテナイメージのみが正式にサポートされています。

2019年5月にWindows Server 2019ベースのServer CoreおよびNano Serverのコンテナイメージをプレビューとしてサポートすることが発表されましたが、この記事の制作執筆時点では詳細を確認できていません。

Azure上で利用可能なDocker環境としては、そのほかにIaaSであるAzure仮想マシンで構築したLinuxまたはWindowsのスタンドアロンDockerホスト環境やKubernetesクラスタ環境があります。

これはIaaS環境であるため、Dockerホストやクラスタを利用者自身で構築し、保守および管理しなければなりません。この点がサーバレスで利用できるPaaSのACIや、Kubernetesクラスタの保守と管理を最小化できるAKSとの大きな違いです。

ACIを利用するとLinuxやmacOS、あるいはWindows上のDockerホスト環境(Windows 10向けはDocker Desktop for Windows)でアプリを含むカスタムイメージを準備して、ローカル環境でテストし、Docker Hubのパブリックまたはプライベートレジストリ、Azure Container Registryなどを介してACIにデプロイして、ACIが提供するDockerエンジンで実行することができます。

その方法をAzureポータルのGUIで行う手順を今回、Azure CLI(またはAzure PowerShell)のコマンドラインで行う手順を次回に説明します。

ACIにコンテナをデプロイする方法(Azureポータルの場合)

DockerベースでWebアプリを開発している技術者なら、Dockerクライアントのコマンドライン(docker pull、docker push、docker runなど)を使用したコンテナイメージの取得やデプロイ、イメージの作成、イメージの共有に慣れているでしょう。

ACIにおいても、Azure CLIやAzure PowerShellのコマンドライン操作がメインになります。しかしながら、ACIの基本的な操作を学ぶには、先にAzureポータルのGUIを使用して操作してみることが理解を助けてくれるはずです。

今回は、第27回でも使用したオープンソースのWebサーバ「nginx」を、Docker Hubで公開されているDocker公式イメージから「東日本」リージョンのACIにデプロイする例で説明します。

Azure CLIやAzure PowerShellによるコマンドライン操作については、次回に説明します。詳細については、以下の公式ドキュメントで確認してください。

Azureポータルを開き、Azure Marketplaceで「Containers Instances」を使用するか「コンテナーインスタンス」ブレードの「追加」をクリックして、「コンテナーインスタンスの作成」を開きます。

「基本」タブでは、リソースグループに既存のリソースグループを選択して指定するか、新規に作成します。コンテナ名(正確にはコンテナグループ名)として任意の名前を入力し、地域のドロップダウンリストから作成先のAzureリージョンを選択します。

日本では「東日本」のみでACIのサービスが提供されています。今回はDocker公式イメージを使用するので、イメージの種類として「パブリック」を選択し、イメージ名にDocker Hubのnginxレジストリである「nginx」と入力し、OSの種類として「Linux」を選択します。

  • Azure“超”入門 第29回

    「コンテナーインスタンスの作成」の「基本」ページでリソースグループ、コンテナ名、リージョン、コンテナのイメージなどを構成する

Windowsコンテナをデプロイする場合は、イメージ名に例えば「mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016」(Windows Server 2016 Server CoreのベースOSイメージから作成されたIISを含む公式イメージ)のように入力し「Windows」を選択してください。なお、ACIにデプロイ可能なバージョンには制限があります。詳しくは、次回に説明します。

「基本」タブは最低限、ここまでの項目を満たしてください。その後、「次:ネットワーク>」をクリックして「ネットワーク」タブに切り替えます。

「ネットワーク」タブでは、パブリックIPアドレスを含める「はい」(既定)を選択し、受信を許可するポートを構成します(既定はTCPポート80)。DNS名ラベルはオプションであり、FQDN「.<リージョン>.azurecontainer.io」によるアクセスを可能にします。省略した場合、自動的に割り当てられるパブリックIPアドレスによる接続が可能です。

  • Azure“超”入門 第29回

    「コンテナーインスタンス」への外部アクセスのためのネットワーク設定を調整し、「確認および作成」タブに切り替えて「作成」をクリックする

「ネットワーク」タブの構成が完了したら、「確認および作成」をクリックし、「確認および作成」タブに移動して「作成」をクリックします。

指定したレジストリからイメージの取得(pull)が行われ、コンテナを作成・開始します。Linuxコンテナの場合、1分程度ですばやくデプロイが完了します。

  • Azure“超”入門 第29回

    Linuxコンテナの場合、わずか1分程度でデプロイが完了する。FQDNまたはIPアドレスによる指定でnginxのWebサーバが動作していることを確認できる

ちなみにWindowsコンテナの場合、コンテナイメージのサイズ(展開後のサイズで10GB以上)が大きく、起動にも時間がかかるため(プロセスモードではなく、Hyper-V分離モードでHyper-Vコンテナとして作成される)、筆者が「mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016」で試したときには15分以上かかりました。

コンテナインスタンスのログやコンソールにアクセスする

Azureポータルの「コンテナーインスタンス」ブレードの「概要」ページでは、コンテナのデプロイのほかに再起動や停止、削除などの操作が可能です。Azureのほかのサービスとは異なり、ACIのコンテナは停止中課金されることがありません。

「コンテナー」ページでは、操作イベント、出力されたログメッセージの表示ができるほか、OSインスタンスのコンソールに接続することも可能です。

  • Azure“超”入門 第29回

    Azureポータルでは、実行中のコンテナのOSインスタンスにコンソール接続することができる

「接続」タブの「Choose Start Up Command」で「/bin/bash」または「/bin/sh」を選択してLinuxコンテナのインスタンスのコンソールに接続するか、「Custom」に「cmd.exe」または「powershell.exe」と入力してWindowsコンテナのインスタンスのコンソールに接続することができます。

ACIからデプロイ済みコンテナをクリーンアップする

ACIにデプロイしたコンテナの試用が終わったら「コンテナーインスタンス」ブレードでデプロイ済みのコンテナを削除し(実行中でも停止中でもかまいません)、「リソースグループ」ブレードでリソースグループを削除します(ただし、ほかにリソースが残っていない場合)。これで、完全にクリーンアップすることができます。

コンテナグループとは

先ほど、コンテナ名の名前は正確にはコンテナグループの名前であると言いました。Azureポータルで今回の手順でデプロイする場合、1つのコンテナを持つコンテナグループが作成されることになります。

コンテナグループとは、ACIの最上位のリソースであり、同じコンテナホスト上にスケジュール設定される器であり、ライフサイクル、仮想ネットワーク、ストレージボリュームを共有します。

例えば、データベースを提供するコンテナとWebフロントエンドとして機能するコンテナで構成するグループを作成して、多層アプリケーションをデプロイすることができます。Azureサブスクリプションあたり最大100グループ、1つのコンテナグループあたり最大60を作成することができます。

複数で構成するコンテナグループは、YAMLファイルまたはリソースマネージャーテンプレート(JSON)を使用して、Azure CLIのコマンドラインを使用してデプロイする必要があります。なお、現時点で複数のコンテナで構成するグループは、Linuxコンテナに限定されています。

著者プロフィール

山市良
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年)などがある。