Usar Azure Container Instances para ejecutar los contenedores de Docker Desktop

Una de las novedades que vendrá como parte de Docker Desktop es la posibilidad de ejecutar los contenedores que creemos a través de este en Azure Container Instances, en lugar de en local. En este artículo te muestro cómo probarlo, para que veas lo fácil que va a ser.

Instalar Docker Desktop Edge

Esta funcionalidad todavía está en fase preliminar, por lo que para que esto funcione debes tener la versión Docker Desktop Edge 2.3.2.

El canal Edge es el que tiene las últimas novedades en las que está trabajando la compañía pero que todavía no se consideran estables.

Crear un contexto en Docker Desktop asociado a ACI

Para poder comunicarnos con Azure, y más en concreto con el servicio Azure Container Instances, lo primero que debes hacer es iniciar sesión a través del siguiente comando:

docker login azure

Esto abrirá una ventana del navegador que te pedirá tus credenciales de acceso a la suscripción que quieres utilizar. Una vez introducidas correctamente la consola te devolverá el mensaje: “login succedeed”.

Lo siguiente que necesitas hacer es crear el contexto. Este comando te guiará en la configuración del mismo:

docker context create aci aci-context --location northeurope

Al estar en una versión muy preliminar por ahora no te permite personalizar el nombre del grupo de recursos, en el caso de que quieras crearlo a través del asistente. Por otro lado, he indicado la ubicación, en este ejemplo North Europe, ya que de no hacerlo la por defecto sería East US y esto condicionará dónde quedarán desplegados mis futuros contenedores.

Crear un contenedor desde Docker Desktop en ACI

Ahora que ya tienes el contexto creado necesitas decirle a Docker que quieres usarlo:

docker context use aci-context

A partir de este momento todos los comandos que se ejecuten estarán utilizando Azure Container Instances como lugar para alojar los contenedores. Para comprobarlo, crea el siguiente a modo de ejemplo:

docker run --name apache-app -p 80:80 httpd

El proceso será un poco diferente a lo que estamos acostumbrados:

Una vez finalizado, si revisas los contenedores que tienes ejecutándose bajo este contexto verás el llamado apache-app, que apunta a una IP pública en Azure:

➜  ~ docker ps
CONTAINER ID        IMAGE               COMMAND             STATUS              PORTS
apache-app          httpd                                   Running             51.104.176.211:80->80/tcp

Por otro lado, en el grupo de recursos creado a través de Docker Desktop verás que efectivamente tu contenedor está ahí:

Accediendo a la IP pública que ves a través de docker ps verás la web por defecto alojada en tu contenedor de Apache creado desde Docker Desktop en Azure.

Por supuesto, puedes hacer uso de docker logs para comprobar lo que está ocurriendo con tu contenedor en la nube:

➜  ~ docker logs apache-app
[Sun Jun 28 06:48:15.250942 2020] [mpm_event:notice] [pid 1:tid 139815105684608] AH00489: Apache/2.4.43 (Unix) configured -- resuming normal operations
[Sun Jun 28 06:48:15.305315 2020] [core:notice] [pid 1:tid 139815105684608] AH00094: Command line: 'httpd -D FOREGROUND'
10.240.255.56 - - [28/Jun/2020:06:51:43 +0000] "GET /robots.txt HTTP/1.1" 404 196
10.240.255.55 - - [28/Jun/2020:06:51:43 +0000] "GET / HTTP/1.1" 200 45
10.240.255.55 - - [28/Jun/2020:06:51:43 +0000] "GET /favicon.ico HTTP/1.1" 404 196

Y para eliminarlo basta con ejecutar el siguiente comando, de la misma forma que haríamos si trabajáramos en local:

docker rm apache-app

¡Saludos!