Tutorial: Deploy a multi-container group using a YAML file
Azure Container Instances supports the deployment of multiple containers onto a single host using a container group. A container group is useful when building an application sidecar for logging, monitoring, or any other configuration where a service needs a second attached process.
In this tutorial, you follow steps to run a simple two-container sidecar configuration by deploying a YAML file using the Azure CLI. A YAML file provides a concise format for specifying the instance settings. You learn how to:
- Configure a YAML file
- Deploy the container group
- View the logs of the containers
Multi-container groups are currently restricted to Linux containers.
If you don’t have an Azure subscription, create a free account before you begin.
Use Azure Cloud Shell
Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell lets you use either
PowerShell to work with Azure services. You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.
To launch Azure Cloud Shell:
|Select Try It in the upper-right corner of a code block. Selecting Try It doesn't automatically copy the code to Cloud Shell.|
|Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser.|
|Select the Cloud Shell button on the top-right menu bar in the Azure portal.|
To run the code in this article in Azure Cloud Shell:
Launch Cloud Shell.
Select the Copy button on a code block to copy the code.
Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
Press Enter to run the code.
Configure a YAML file
To deploy a multi-container group with the az container create command in the Azure CLI, you must specify the container group configuration in a YAML file. Then pass the YAML file as a parameter to the command.
Start by copying the following YAML into a new file named deploy-aci.yaml. In Azure Cloud Shell, you can use Visual Studio Code to create the file in your working directory:
This YAML file defines a container group named "myContainerGroup" with two containers, a public IP address, and two exposed ports. The containers are deployed from public Microsoft images. The first container in the group runs an internet-facing web application. The second container, the sidecar, periodically makes HTTP requests to the web application running in the first container via the container group's local network.
apiVersion: 2018-10-01 location: eastus name: myContainerGroup properties: containers: - name: aci-tutorial-app properties: image: mcr.microsoft.com/azuredocs/aci-helloworld:latest resources: requests: cpu: 1 memoryInGb: 1.5 ports: - port: 80 - port: 8080 - name: aci-tutorial-sidecar properties: image: mcr.microsoft.com/azuredocs/aci-tutorial-sidecar resources: requests: cpu: 1 memoryInGb: 1.5 osType: Linux ipAddress: type: Public ports: - protocol: tcp port: '80' - protocol: tcp port: '8080' tags: null type: Microsoft.ContainerInstance/containerGroups
To use a private container image registry, add the
imageRegistryCredentials property to the container group, with values modified for your environment:
imageRegistryCredentials: - server: imageRegistryLoginServer username: imageRegistryUsername password: imageRegistryPassword
Deploy the container group
Create a resource group with the az group create command:
az group create --name myResourceGroup --location eastus
Deploy the container group with the az container create command, passing the YAML file as an argument:
az container create --resource-group myResourceGroup --file deploy-aci.yaml
Within a few seconds, you should receive an initial response from Azure.
View deployment state
To view the state of the deployment, use the following az container show command:
az container show --resource-group myResourceGroup --name myContainerGroup --output table
If you'd like to view the running application, navigate to its IP address in your browser. For example, the IP is
184.108.40.206 in this example output:
Name ResourceGroup Status Image IP:ports Network CPU/Memory OsType Location ---------------- --------------- -------- -------------------------------------------------------------------------------------------------- -------------------- --------- --------------- -------- ---------- myContainerGroup danlep0318r Running mcr.microsoft.com/azuredocs/aci-tutorial-sidecar,mcr.microsoft.com/azuredocs/aci-helloworld:latest 220.127.116.11:80,8080 Public 1.0 core/1.5 gb Linux eastus
View container logs
View the log output of a container using the az container logs command. The
--container-name argument specifies the container from which to pull logs. In this example, the
aci-tutorial-app container is specified.
az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-app
listening on port 80 ::1 - - [21/Mar/2019:23:17:48 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0" ::1 - - [21/Mar/2019:23:17:51 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0" ::1 - - [21/Mar/2019:23:17:54 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
To see the logs for the sidecar container, run a similar command specifying the
az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-sidecar
Every 3s: curl -I http://localhost 2019-03-21 20:36:41 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 1663 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 HTTP/1.1 200 OK X-Powered-By: Express Accept-Ranges: bytes Cache-Control: public, max-age=0 Last-Modified: Wed, 29 Nov 2017 06:40:40 GMT ETag: W/"67f-16006818640" Content-Type: text/html; charset=UTF-8 Content-Length: 1663 Date: Thu, 21 Mar 2019 20:36:41 GMT Connection: keep-alive
As you can see, the sidecar is periodically making an HTTP request to the main web application via the group's local network to ensure that it is running. This sidecar example could be expanded to trigger an alert if it received an HTTP response code other than
In this tutorial, you used a YAML file to deploy a multi-container group in Azure Container Instances. You learned how to:
- Configure a YAML file for a multi-container group
- Deploy the container group
- View the logs of the containers
You can also specify a multi-container group using a Resource Manager template. A Resource Manager template can be readily adapted for scenarios when you need to deploy additional Azure service resources with the container group.