In April 2018, Microsoft announced that Azure Container Instances (ACI) is now ready for production usage. Azure Container Instances offers the fastest and simplest way to run a container in Azure, without having to provision any virtual machines. With Azure Container Instances, you can easily run containers with a single command and in a few seconds. In the initial ACI preview, Microsoft said that customers were mainly using the services for batch processing and continuous integration. To get information about pricing, please read this page: https://azure.microsoft.com/en-us/pricing/details/container-instances/
ACI lets you create Linux or Windows Containers without the need to deploy a Container host, so in other words, ACI is serverless, and it works like a charm!
So in this article, I will describe how to create a simple Container using Azure Container Instances (ACI). In the first part, I will describe ACI using the Azure Portal and the command line, and in the second part, I will describe Azure Container Registry.
Note: ACI can be controlled by Kubernetes using portable API Connector. You don’t need to run Kubernetes in Azure to use this feature; all you need is a public IP address for the ACI Kubernetes APIs.
How Azure Container Instances works? ACI will simply assign an existing Virtual Machine to your container, so you will be up and running in seconds. Once deployed, your container is up and running with either a public IP address or a private internal address. To go further with Azure Container and orchestration, I advise you to read the following article by Florent Appointaire to learn more about Azure Container Service: https://www.starwindsoftware.com/blog/azure-container-service-how-to-start-correctly or Azure Kubernetes Service (AKS) https://azure.microsoft.com/en-us/blog/introducing-azure-container-service-aks-managed-kubernetes-and-azure-container-registry-geo-replication/
Go to the Azure Portal, and click “Create a resource”, then browse to “Containers” and click “Container Instances”:
A new blade will appear to create the Container Instance. Enter the following information:
- Container Name: Enter a friendly name for your Container Instance
- Container Image Type: Depending your needs, but in my case, I want to use a public image from the Docker Hub.
- Container Image: You must specify the URI or Docker Hub tag of the public image. For instance, you can use the “microsoft/aci-helloworld” image to run a very basic “Hello World!” within your Container.
- Subscription: Select your Azure Subscription
- Resource Group: Select an existing Resource Group or create a new one
- Location: Select the location in which the Container Instance will be located
Once you are ready, click “Next” to configure your Container:
Here, you must configure the Container Instance:
- OS Type: Depending your Container Image, you will select “Windows” or “Linux”
- Number of cores and Memory: You can customize your Container Instance
- Networking: If you want to expose your Container Instance on Internet, then select “Yes”
- DNS Name Label: This is the friendly name you will use to reach your Container Instance
- Port: By default, the port number will be 80. This port will be opened in order to access to your Container Instance.
- Open Additional Ports: You can open additional ports but ports 80 and 443 are commonly used for containers.
- Restart Policy: Select when your Container Instance should restart: “Always”, “On failure” or “Never”.
- Environment variable: You can set some environment variables within the Container.
- Command override: This is the first command to execute within the Container.
Once you are ready, you can click “OK” and wait until the deployment is finished
You may get the following deployment error during the process:
"message": "The DNS name label 'mycontainer' in container group 'mycontainer' not available. Try using a different label."
Nothing critical, you just have to modify the DNS Name Label and rerun the wizard.
Ok, great the deployment is done, so let’s check the duration. In my case, a very basic Container Instance took only 1 minute 36 seconds, which is awesome.
To access to your Container Instance, copy and paste the FQDN in your favorite browser
Done! The ACI image will display a nice welcome page as shown below:
Azure Container Instances Logs
When the deployment is done, you can check the logs, and then you will see the following steps about the deployment:
- Step 1: Pulling image “microsoft/aci-helloworld”
- Step 2: Successfully pulled image “microsoft/aci-helloworld”
- Step 3: Created container with a specific ID
- Step 4: Started container with the ID
You can also check the Container Logs by navigating to “Containers” and then click “Logs”.You should see the HTTP request generated when you viewed the application in your browser.
ACI and Windows PowerShell
For those of you who want to use the command line to deploy a Container, you can use Windows PowerShell to achieve this task.
Firstly, create the resource group with the New-AzureRmResourceGroup cmdlet:
New-AzureRmContainerGroup -ResourceGroupName myResourceGroup -Name mycontainer -Image microsoft/iis:nanoserver -OsType Windows -DnsNameLabel get-cmd-demo
Then, wait a few seconds until the Container Instance is created:
Get-AzureRmContainerGroup -ResourceGroupName myResourceGroup -Name mycontainer
Now, try to access to your Container using your web browser and you will see the IIS Welcome page:
Azure Container Instances and Azure Container Registry
To go further, keep in mind that you can push your own Container in ACI. To get a local container into Azure Container Instances, you need to put it into a private repository that can be accessed by Container Instances. You can use:
- Docker Hub
- Azure Container Registry (ACR)
If you want to use ACR, then go to the Azure Portal and Click “Create a resource”, “Containers”, “Container Registry”:
Enter a friendly name for your Container Registry:
The Azure Container Registry is created and I can access to my ACR using the login server: “getcmd.azurecr.io” as shown below:
You must enable the “Admin user” mode in order to generate the password:
Before pushing and pulling container images, you must have a valid Container image on your machine. In my case, I will pull the ACI Demo image from Docker Hub:
docker pull microsoft/aci-helloworld
Before pushing the image to the Azure Registry, I must tag the image with the ACR login server name:
docker tag microsoft/aci-helloworld getcmd.azurecr.io/aci-helloworld:v1DemoAzure
Then, I need to log in to my Azure Container Registry. Here, I use the “Docker Login” command as shown below:
docker login getcmd.azurecr.io -u getcmd -p PASSWORD
Now, I can push the custom image to my Azure Container Registry:
docker push getcmd.azurecr.io/aci-helloworld:v1DemoAzure
I can confirm that the image exists in my ACR:
I can deploy this image to a new WebApp, or I can use this image during the ACI wizard:
Thanks to this great Azure Service, you can easily deploy your Container into Azure for the following purposes:
You can interact with Azure Container Instances using Azure Codes, go to the following page: https://azure.microsoft.com/en-us/resources/samples/?sort=0&term=aci. These code samples will help you to interact with Azure Services.
Thanks for reading!