チュートリアル:Docker Compose を使用して複数コンテナー グループをデプロイする
このチュートリアルでは、Docker Compose を使用して複数コンテナー アプリケーションをローカルで定義して実行した後、Azure Container Instances にコンテナー グループとしてデプロイします。
Docker を使用してクラウドネイティブ アプリを開発していて、ローカルでの開発からクラウドへのデプロイにシームレスに切り替えたい場合は、Azure Container Instances でコンテナーをオンデマンドで実行します。 この機能は、Docker と Azure 間の統合によって実現されます。 ネイティブ Docker コマンドを使用すると、Azure で 1 つのコンテナー インスタンスまたは複数コンテナー グループを実行できます。
重要
Azure Container Instances の一部の機能はサポートされていません。 Docker ACI Integration GitHub リポジトリでイシューを作成して、Docker と Azure の統合に関するフィードバックを提供してください。
ヒント
コンテナー、イメージ、コンテキストを開発、実行、管理するための統合エクスペリエンスとして、Visual Studio Code 用の Docker 拡張機能を使用できます。
この記事では、次の内容について説明します。
- Azure コンテナー レジストリを作成する
- GitHub からアプリケーション ソース コードを複製する
- Docker Compose を使用してイメージをビルドし、複数コンテナー アプリケーションをローカルで実行する
- アプリケーション イメージをコンテナー レジストリにプッシュする
- Docker 用の Azure コンテキストを作成する
- Azure Container Instances にアプリケーションをデプロイする
前提条件
Azure CLI - ローカル コンピューターに Azure CLI がインストールされている必要があります。 バージョン 2.10.1 以降をお勧めします。 バージョンを確認するには、
az --version
を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールに関するページを参照してください。Docker Desktop - Windows または macOS で利用可能な、Docker Desktop バージョン 2.3.0.5 以降を使用する必要があります。 または、Docker ACI Integration CLI for Linux をインストールします。
Azure Container Registry の作成
コンテナー レジストリを作成する前に、そのデプロイ先となるリソース グループが必要です。 リソース グループは、Azure リソースをまとめてデプロイして管理するための論理上のコレクションです。
az group create コマンドを使用して、リソース グループを作成します。 次の例では、myResourceGroup という名前のリソース グループが eastus リージョンに作成されます。
az group create --name myResourceGroup --location eastus
リソース グループを作成したら、az acr create コマンドを使用して Azure コンテナー レジストリを作成します。 コンテナー レジストリ名は、Azure 内で一意にする必要があります。また、5 ~ 50 文字の英数字を含める必要があります。 <acrName>
を、レジストリの一意の名前に置き換えます。
az acr create --resource-group myResourceGroup --name <acrName> --sku Basic
mycontainerregistry082 という名前の新しい Azure Container Registry の出力の一部を次に示します。
{
"creationDate": "2020-07-16T21:54:47.297875+00:00",
"id": "/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/mycontainerregistry082",
"location": "eastus",
"loginServer": "mycontainerregistry082.azurecr.io",
"name": "mycontainerregistry082",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sku": {
"name": "Basic",
"tier": "Basic"
},
"status": null,
"storageAccount": null,
"tags": {},
"type": "Microsoft.ContainerRegistry/registries"
}
このチュートリアルの残りの部分では、この手順で選択したコンテナー レジストリ名のプレースホルダーとして <acrName>
を使用します。
コンテナー レジストへのにログイン
イメージをプッシュする前に、Azure Container Registry インスタンスにログインする必要があります。 az acr login コマンドを使用して、操作を完了します。 コンテナー レジストリの作成時に選んだ一意名を指定する必要があります。
az acr login --name <acrName>
次に例を示します。
az acr login --name mycontainerregistry082
このコマンドは、完了すると Login Succeeded
を返します。
Login Succeeded
アプリケーションのコードを入手する
このチュートリアルで使うサンプル アプリケーションは、基本的な投票アプリです。 アプリケーションは、フロントエンド Web コンポーネントとバックエンド Redis インスタンスで構成されています。 Web コンポーネントは、カスタム コンテナー イメージにパッケージ化されています。 Redis インスタンスでは、Docker Hub から変更されていないイメージを使用します。
サンプル アプリケーションを開発環境にクローンするには、git を使用します。
git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
複製されたディレクトリに移動します。
cd azure-voting-app-redis
ディレクトリ内にはアプリケーションのソース コードと、事前作成された Docker Compose ファイルである docker-compose.yaml があります。
Docker Compose ファイルの変更
テキスト エディターで docker-compose.yaml を開きます。 このファイルでは、azure-vote-back
および azure-vote-front
サービスが構成されます。
version: '3'
services:
azure-vote-back:
image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
container_name: azure-vote-back
environment:
ALLOW_EMPTY_PASSWORD: "yes"
ports:
- "6379:6379"
azure-vote-front:
build: ./azure-vote
image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
container_name: azure-vote-front
environment:
REDIS: azure-vote-back
ports:
- "8080:80"
azure-vote-front
構成で、次の 2 つの変更を行います。
azure-vote-front
サービスのimage
プロパティを更新します。 イメージ名の前に、Azure コンテナー レジストリのログイン サーバー名 <acrName>.azurecr.io を付けます。 たとえば、レジストリに myregistry という名前が付けられている場合、ログイン サーバー名は myregistry.azurecr.io (すべて小文字) になり、イメージ プロパティはmyregistry.azurecr.io/azure-vote-front
となります。ports
マッピングを80:80
に変更します。 ファイルを保存します。
更新されたファイルは、次のようになります。
version: '3'
services:
azure-vote-back:
image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
container_name: azure-vote-back
environment:
ALLOW_EMPTY_PASSWORD: "yes"
ports:
- "6379:6379"
azure-vote-front:
build: ./azure-vote
image: myregistry.azurecr.io/azure-vote-front
container_name: azure-vote-front
environment:
REDIS: azure-vote-back
ports:
- "80:80"
これらの置換を行うことによって、次の手順で作成する azure-vote-front
イメージに Azure コンテナー レジストリ用のタグが付けられ、イメージをプルして Azure Container Instances で実行できるようになります。
ヒント
このシナリオでは、Azure コンテナー レジストリを使用する必要はありません。 たとえば、アプリケーション イメージをホストするために、Docker Hub でプライベート リポジトリを選択できます。 別のレジストリを選択した場合は、イメージのプロパティを適切に更新します。
複数コンテナー アプリケーションをローカルで実行する
docker-compose up を実行すると、サンプル docker-compose.yaml
ファイルを使用してコンテナー イメージをビルドし、Redis イメージをダウンロードして、アプリケーションを起動します。
docker-compose up --build -d
完了したら、docker images コマンドを使って、作成されたイメージを確認します。 3 つのイメージがダウンロードまたは作成されていることを確認してください。 azure-vote-front
イメージには、uwsgi-nginx-flask
イメージをベースとして使用するフロントエンド アプリケーションが含まれています。 redis
イメージは、Redis インスタンスを起動するために使用されます。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myregistry.azurecr.io/azure-vote-front latest 9cc914e25834 40 seconds ago 944MB
mcr.microsoft.com/oss/bitnami/redis 6.0.8 3a54a920bb6c 4 weeks ago 103MB
tiangolo/uwsgi-nginx-flask python3.6 788ca94b2313 9 months ago 9444MB
docker ps コマンドを実行して、実行中のコンテナーを確認します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82411933e8f9 myregistry.azurecr.io/azure-vote-front "/entrypoint.sh /sta…" 57 seconds ago Up 30 seconds 443/tcp, 0.0.0.0:80->80/tcp azure-vote-front
b62b47a7d313 mcr.microsoft.com/oss/bitnami/redis:6.0.8 "/opt/bitnami/script…" 57 seconds ago Up 30 seconds 0.0.0.0:6379->6379/tcp azure-vote-back
実行中のアプリケーションを表示するには、ローカルの Web ブラウザーで「 http://localhost:80
」と入力します。 次の例で示すように、サンプル アプリケーションが読み込まれます。
ローカル アプリケーションの試行が終了したら、docker-compose down を実行してアプリケーションを停止し、コンテナーを削除します。
docker-compose down
コンテナー レジストリにイメージをプッシュする
アプリケーションを Azure Container Instances にデプロイするには、azure-vote-front
イメージをコンテナー レジストリにプッシュする必要があります。 docker-compose push を実行してイメージをプッシュします。
docker-compose push
レジストリにプッシュされるまでに数分かかる場合があります。
イメージがレジストリに格納されたことを確認するには、az acr repository show コマンドを実行します。
az acr repository show --name <acrName> --repository azuredocs/azure-vote-front
Azure コンテキストを作成する
Docker コマンドを使用して Azure Container Instances でコンテナーを実行するには、最初に Azure にログインします。
docker login azure
メッセージが表示されたら、Azure の資格情報を入力または選択します。
docker context create aci
を実行して、ACI コンテキストを作成します。 このコンテキストにより、Azure サブスクリプションとリソース グループに Docker が関連付けられて、コンテナー インスタンスを作成、管理できるようになります。 たとえば、myacicontext というコンテキストを作成するには、次のように入力します。
docker context create aci myacicontext
プロンプトが表示されたら、Azure サブスクリプション ID を選択してから、既存のリソース グループを選択するか、新しいリソース グループを作成します。 新しいリソース グループを選択すると、システムによって生成された名前で作成されます。 Azure のコンテナー インスタンスは、すべての Azure リソースと同様に、リソース グループにデプロイする必要があります。 リソース グループを使用すると、関連する Azure リソースを整理して管理できます。
docker context ls
を実行して、Docker コンテキストに ACI コンテキストを追加したことを確認します。
docker context ls
アプリケーションを Azure Container Instances にデプロイする
次に、ACI コンテキストに変更します。 以降の Docker コマンドは、このコンテキストで実行されます。
docker context use myacicontext
docker compose up
を実行して、Azure Container Instances でアプリケーションを起動します。 azure-vote-front
イメージがコンテナー レジストリからプルされ、コンテナー グループが Azure Container Instances に作成されます。
docker compose up
Note
ACI コンテキストで現在使用できる Docker Compose コマンドは docker compose up
と docker compose down
です。 これらのコマンドには、docker
と compose
の間にハイフンはありません。
しばらくすると、コンテナー グループがデプロイされます。 サンプル出力:
[+] Running 3/3
⠿ Group azurevotingappredis Created 3.6s
⠿ azure-vote-back Done 10.6s
⠿ azure-vote-front Done 10.6s
docker ps
を実行して、実行中のコンテナーとコンテナー グループに割り当てられている IP アドレスを確認します。
docker ps
サンプル出力:
CONTAINER ID IMAGE COMMAND STATUS PORTS
azurevotingappredis_azure-vote-back mcr.microsoft.com/oss/bitnami/redis:6.0.8 Running 52.179.23.131:6379->6379/tcp
azurevotingappredis_azure-vote-front myregistry.azurecr.io/azure-vote-front Running 52.179.23.131:80->80/tcp
クラウドで実行中のアプリケーションを表示するには、表示されている IP アドレスをローカル Web ブラウザーに入力します。 この例では、「52.179.23.131
」と入力します。 次の例で示すように、サンプル アプリケーションが読み込まれます。
フロントエンド コンテナーのログを表示するには、docker logs コマンドを実行します。 次に例を示します。
docker logs azurevotingappredis_azure-vote-front
また、Azure portal またはその他の Azure ツールを使用して、デプロイしたコンテナー グループのプロパティと状態を確認することもできます。
アプリケーションの試行が完了したら、docker compose down
を使用してアプリケーションとコンテナーを停止します。
docker compose down
このコマンドを実行すると、Azure Container Instances のコンテナー グループが削除されます。
次のステップ
このチュートリアルでは、Docker Compose を使用して、複数コンテナー アプリケーションのローカルでの実行から Azure Container Instances での実行に切り替えました。 以下の方法を学習しました。
- Azure コンテナー レジストリを作成する
- GitHub からアプリケーション ソース コードを複製する
- Docker Compose を使用してイメージをビルドし、複数コンテナー アプリケーションをローカルで実行する
- アプリケーション イメージをコンテナー レジストリにプッシュする
- Docker 用の Azure コンテキストを作成する
- Azure Container Instances にアプリケーションをデプロイする
また、コンテナー、イメージ、コンテキストを開発、実行、管理するための統合エクスペリエンスとして、Visual Studio Code 用の Docker 拡張機能を使用することもできます。
さらに多くの Azure Container Instances の機能を利用する場合は、Azure ツールを使用して複数コンテナー グループを指定します。 たとえば、Azure CLI を YAML ファイルと共に使用して、または Azure Resource Manager テンプレートを使用してコンテナー グループをデプロイする方法のチュートリアルを参照してください。