Azure Virtual Network でコンテナー グループをデプロイするには、Azure CLI で az container create
コマンドを使用します。 YAML 構成ファイルを使用して、az container create
コマンドに高度な構成設定を指定することもできます。
この記事では、YAML 構成ファイルを使用してカスタム DNS 設定でコンテナー グループをデプロイする方法について説明します。
仮想ネットワークへのコンテナー グループのデプロイについて詳しくは、仮想ネットワークでのデプロイに関する記事を参照してください。
重要
以前は、仮想ネットワークにコンテナー グループをデプロイするプロセスでは、構成にネットワーク プロファイルを使用していました。 しかし、ネットワーク プロファイルは、2021-07-01
API バージョンで廃止されました。 代わりにサブネット ID に依存する最新の API バージョンを使用することをお勧めします。
前提条件
有効な Azure サブスクリプション。 アクティブな Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
Azure CLI。 この記事のコマンド ラインの例は Azure CLI を使用し、Bash シェル用にフォーマットされています。 ローカルに Azure CLI をインストールするほかに、Azure Cloud Shell を使用することもできます。
この攻略ガイドで使用するすべてのリソースを管理するためのリソース グループ。 この記事では、サンプルのリソース グループ名 ACIResourceGroup を使用します。
az group create --name ACIResourceGroup --location westus
制限事項
カスタム DNS 構成が適用されている場合でも、Azure DNS リゾルバー IP (168.63.129.16) は、Azure Container Instances の /etc/resolv.conf ファイルに自動的に追加されます。 Azure DNS リゾルバー IP が存在すると、Alpine Linux などの musl-libc を使用するディストリビューションの DNS 解決が正しく行われない可能性があります。 この誤った解決は、musl-libc では、DNS クエリが並行して送信され、最速の応答がキャッシュされるためです。 この問題を回避するには、musl-libc ではなく glibc を使用する Ubuntu や RHEL など、DNS クエリを順番に処理するディストリビューションを使用することをお勧めします。
他のネットワーク シナリオと制限事項については、Azure Container Instances の仮想ネットワークのシナリオとリソースに関するページを参照してください。
重要
仮想ネットワークへのコンテナー グループのデプロイは、Azure Container Instances が利用可能なほとんどのリージョンの Linux コンテナーで使用できます。 詳細については、リージョンとリソースの可用性に関するページをご覧ください。 この記事の例は、Bash シェル形式で示してあります。 PowerShell またはコマンド プロンプトの場合は、それに応じて行連結文字を調整します。
Virtual Network の作成
カスタム DNS 構成を使用してコンテナー グループをデプロイするには、仮想ネットワークが必要です。 この仮想ネットワークには、Azure Container Instances リソースを作成するためのアクセス許可を持つサブネットと、名前解決をテストするためのリンクされたプライベート DNS ゾーンが必要です。
このガイドでは、aci-vnet
という名前の仮想ネットワーク、aci-subnet
という名前のサブネット、private.contoso.com
という名前のプライベート DNS ゾーンを使用します。 Azure プライベート DNS ゾーンを使用します。これについては、プライベート DNS の概要に関するページをご覧ください。
これらの条件を満たす既存の仮想ネットワークがある場合は、「コンテナー グループのデプロイ」に進むことができます。
ヒント
必要に応じて、独自の情報を使用して次のコマンドを変更できます。
az network vnet create コマンドを使用して、仮想ネットワークを作成します。 Classless Inter-Domain Routing (CIDR) 形式でアドレス プレフィックスを入力します (例:
10.0.0.0/16
)。az network vnet create \ --name aci-vnet \ --resource-group ACIResourceGroup \ --location westus \ --address-prefix 10.0.0.0/16
az network vnet subnet create コマンドを使用してサブネットを作成します。 次のコマンドは、コンテナー グループの作成を許可する委任を使用して、仮想ネットワークにサブネットを作成します。 サブネットの操作について詳しくは、「仮想ネットワーク サブネットの追加、変更、削除」をご覧ください。 サブネットの委任について詳しくは、委任されたサブネットに関する仮想ネットワークのシナリオとリソースの記事のセクションを参照してください。
az network vnet subnet create \ --name aci-subnet \ --resource-group ACIResourceGroup \ --vnet-name aci-vnet \ --address-prefixes 10.0.0.0/24 \ --delegations Microsoft.ContainerInstance/containerGroups
このコマンドの出力からサブネット ID キーと値のペアを記録します。 このキーと値のペアは、後で YAML 構成ファイルで使用します。 形式は
"id"
:"/subscriptions/<subscription-ID>/resourceGroups/ACIResourceGroup/providers/Microsoft.Network/virtualNetworks/aci-vnet/subnets/aci-subnet"
です。az network private-dns zone create コマンドを使用して、プライベート DNS ゾーンを作成します。
az network private-dns zone create -g ACIResourceGroup -n private.contoso.com
az network private-dns link vnet create コマンドを使用して、DNS ゾーンを仮想ネットワークにリンクします。 DNS サーバーは、名前解決をテストするためにのみ必要です。
-e
フラグを使用すると自動ホスト名登録が有効になりますが、これは不要なため、false
に設定します。az network private-dns link vnet create \ -g ACIResourceGroup \ -n aciDNSLink \ -z private.contoso.com \ -v aci-vnet \ -e false
上記の手順を完了すると、最終的なキーと値のペアが "virtualNetworkLinkState"
: "Completed"
と表示された出力が表示されます。
コンテナー グループをデプロイする
注意
カスタム DNS 設定は、現在、コンテナー グループのデプロイの Azure portal では使用できません。 YAML ファイル、Resource Manager テンプレート、REST API、または Azure SDK を指定する必要があります。
次の YAML を custom-dns-deploy-aci.yaml という名前の新しいファイルにコピーします。 実際の値を使用して次の構成を編集します。
dnsConfig
: コンテナー グループ内のコンテナーの DNS 設定。nameServers
: DNS 検索に使用するネーム サーバーのリスト。searchDomains
: DNS 検索用に追加される DNS サフィックス。
ipAddress
: コンテナー グループのプライベート IP アドレス設定。ports
:開くポート (もしあれば)。protocol
:開いたポートのプロトコル (TCP または UDP)。
subnetIDs
: 仮想ネットワーク内のサブネットのネットワーク設定。id
: 前に取得したサブネットの完全な Resource Manager リソース ID。
注意
現時点では、DNS 構成フィールドに対しては自動的にクエリが実行されないため、これらのフィールドは明示的に入力する必要があります。
apiVersion: '2021-07-01'
location: westus
name: pwsh-vnet-dns
properties:
containers:
- name: pwsh-vnet-dns
properties:
command:
- /bin/bash
- -c
- echo hello; sleep 10000
environmentVariables: []
image: mcr.microsoft.com/powershell:latest
ports:
- port: 80
resources:
requests:
cpu: 1.0
memoryInGB: 2.0
dnsConfig:
nameServers:
- 10.0.0.10 # DNS Server 1
- 10.0.0.11 # DNS Server 2
searchDomains: contoso.com # DNS search suffix
ipAddress:
type: Private
ports:
- port: 80
subnetIds:
- id: /subscriptions/<subscription-ID>/resourceGroups/ACIResourceGroup/providers/Microsoft.Network/virtualNetworks/aci-vnet/subnets/aci-subnet
osType: Linux
tags: null
type: Microsoft.ContainerInstance/containerGroups
az container create コマンドを使って、--file
パラメーターに YAML ファイル名を指定して、コンテナー グループをデプロイします。
az container create --resource-group ACIResourceGroup \
--file custom-dns-deploy-aci.yaml
デプロイが完了したら、az container show コマンドを実行してその状態を表示します。 サンプル出力:
az container show --resource-group ACIResourceGroup --name pwsh-vnet-dns -o table
Name ResourceGroup Status Image IP:ports Network CPU/Memory OsType Location
---------------- --------------- -------- ------------------------------------------ ----------- --------- --------------- -------- ----------
pwsh-vnet-dns ACIResourceGroup Running mcr.microsoft.com/powershell 10.0.0.5:80 Private 1.0 core/2.0 gb Linux westus
状態が Running
と表示されたら、az container exec コマンドを実行して、コンテナー内の bash アクセスを取得します。
az container exec --resource-group ACIResourceGroup --name pwsh-vnet-dns --exec-command "/bin/bash"
コンテナー内から DNS が期待どおりに動作していることを確認します。 たとえば、/etc/resolv.conf
ファイルを読み取り、YAML ファイルで提供される DNS 設定が適切に構成されていることを確認します。
Note
カスタム DNS 構成が適用されている場合でも、Azure DNS リゾルバー IP (168.63.129.16) は、ACI の /etc/resolv.conf ファイルに自動的に追加されることに注意してください。 これにより、DNS クエリ プロセスを並行して処理するディストリビューションで解決の問題が発生する可能性があります。 詳細については、「制限事項」セクションを参照してください。
root@wk-caas-81d609b206c541589e11058a6d260b38-90b0aff460a737f346b3b0:/# cat /etc/resolv.conf
nameserver 10.0.0.10
nameserver 10.0.0.11
nameserver 168.63.129.16
search contoso.com
リソースをクリーンアップする
コンテナー インスタンスの削除
作成したコンテナー インスタンスが完了したら、az container delete コマンドを使用してそれを削除します。
az container delete --resource-group ACIResourceGroup --name pwsh-vnet-dns -y
ネットワーク リソースの削除
この仮想ネットワークを再度使用する予定がない場合は、az network vnet delete コマンドを使用して削除できます。
az network vnet delete --resource-group ACIResourceGroup --name aci-vnet
リソース グループの削除
このガイドの外部でこのリソース グループを使用する予定がない場合は、az group delete コマンドを使用して削除できます。
az group delete --name ACIResourceGroup
操作を実行するかどうかを確認するメッセージが表示されたら、y
を入力します。
次のステップ
仮想ネットワーク内にコンテナー グループをデプロイする方法の詳細については、Azure クイック スタート テンプレート「仮想ネットワークを使用して Azure コンテナー グループを作成する」を参照してください。