How to deploy containers into Azure Container Instances(ACI) using Docker Desktop?

Raju RH
3 min readJul 12, 2020

Recently there was an announcement (May 2020) about Docker partnership with Microsoft Azure for shortening the developer commute with Docker desktop and running containers in Container Instances in Azure. The new edge release of Docker Desktop provides an easy and quick integration between Docker and Microsoft Azure that enables you to use native Docker commands to run your applications as serverless containers with Azure Container Instances.

As a developer I can make use of the same Docker CLI commands and experience which I use locally, to interact with Azure (ACI) as well. This experience is achieved by extending the existing docker context to support ACI.

Pre-requisites

Docker CLI commands for ACI

  • Log into Azure from the Docker CLI
docker login azure
  • Once you are logged in, you just need to tell Docker that you want to use something besides the local engine. Docker context helps you to create ACI context. You can either pass in an Azure subscription and resource group to the command or use the interactive CLI to choose them. For this example I will provide in command as shown below.
docker context create aci demoacicontext --subscription-id XXX --resource-group XXX --location XXX
  • Once you have created Docker Context, you can tell Docker to switch to using it by default. You can check context by using docker context ls command. Use below command to switch between the contexts.
docker context use demoacicontext
  • As mentioned in pre-requisites, I have an nginx image in my ACR for the demo which will be used for ACI provisioning using the following command.
docker context use demoacicontextdocker run -d -p 80:80 demoacrblog.azurecr.io/samples/nginx:latest --name DemoACI

Note: In case while pulling container image from ACR if you encounter any error related to Authentication, then use command for log in to registry e.g. az acr login — name <ACR Registry Name>

If we navigate to Azure portal and then Resource group under which we provisioned we can see new ACI provisioned using Docker CLI with Public IP assigned, using which we can browse the container instance.

  • Similarly we can remove ACI containers using docker command as shown below. Note that once the command has been executed, nothing is running on ACI and all resources are removed from ACI — resulting in no ongoing cost
docker rm demoaci
  • Apart from remove command following commands are supported as well
docker exec -t <CONTAINER_ID> COMMANDdocker logs <CONTAINER_ID>

Above is a demonstration for single a container, if you have a requirement to deploy a multi-container app then use Docker Compose. Only change in command will be instead of using docker run will be using new syntax docker compose up

Docker commands summary for provisioning and removing ACI.

Not all commands are supported but there are also commands that they plan to support in the future but just haven’t got around to yet e.g. docker volume.

Originally published at https://rajurh.blogspot.com on July 12, 2020.

--

--

Raju RH

Specialties: Azure,.Net Core, Docker, Containers, Azure DevOps, Cognitive Services (AI)