Tutorial: Creación de una imagen de contenedor para su implementación en Azure Container Instances

Azure Container Instances permite la implementación de contenedores de Docker en una infraestructura de Azure sin necesidad de aprovisionar ninguna máquina virtual o adoptar un servicio de nivel superior. En este tutorial, se empaqueta una pequeña aplicación web de Node.js en una imagen del contenedor que se puede ejecutar mediante Azure Container Instances.

En este artículo, la primera parte de la serie, podrá:

  • Clonar el código fuente de la aplicación desde GitHub
  • Crear una imagen de contenedor desde el origen de la aplicación
  • Probar la imagen en un entorno local de Docker

En las partes dos y tres del tutorial, se carga la imagen de Azure Container Registry y, después, se implementa en Azure Container Instances.

Antes de empezar

Para completar este tutorial es preciso cumplir los siguientes requisitos:

CLI de Azure: debe tener la versión 2.0.29 de la CLI de Azure, cualquier versión posterior, instalada en el equipo local. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, consulte Instalación de la CLI de Azure.

Docker: en este tutorial se supone que el usuario tiene un conocimiento básico de los principales conceptos de Docker, como los contenedores, las imágenes de contenedor y los comandos básicos de docker. Para conocer los principios básicos de Docker y de los contenedores, consulte Introducción a Docker.

Docker: para completar este tutorial, es preciso que el motor de Docker esté instalado localmente. Docker dispone de paquetes que configuran el entorno de Docker en macOS, Windows y Linux.

Importante

Dado que Azure Cloud Shell no incluye el demonio de Docker, para completar este tutorial es preciso instalar tanto la CLI de Azure como el motor de Docker en el equipo local. Azure Cloud Shell no se puede instalar para este tutorial.

Obtención del código de la aplicación

La aplicación de ejemplo de este tutorial es una aplicación web sencilla compilada en Node.js. La aplicación sirve una página HTML estática y es similar a la captura de pantalla siguiente:

Aplicación del tutorial tal como se muestra en un explorador

Use Git para clonar el repositorio de la aplicación de ejemplo:

git clone https://github.com/Azure-Samples/aci-helloworld.git

También puede descargar el archivo ZIP directamente de GitHub.

Compilación de la imagen del contenedor

El archivo Dockerfile de la aplicación de ejemplo muestra cómo se compila el contenedor. Comienza con una imagen oficial de Node.js basada en Alpine Linux, una pequeña distribución muy apropiada para usarla con contenedores. Luego copia los archivos de aplicación en el contenedor, instala las dependencias mediante Node Package Manager y, por último, inicia la aplicación.

FROM node:8.9.3-alpine
RUN mkdir -p /usr/src/app
COPY ./app/* /usr/src/app/
WORKDIR /usr/src/app
RUN npm install
CMD node /usr/src/app/index.js

Use el comando docker build para crear la imagen del contenedor y etiquetarla como aci-tutorial-app:

docker build ./aci-helloworld -t aci-tutorial-app

La salida del comando docker build es similar a la siguiente (truncada para favorecer la legibilidad):

docker build ./aci-helloworld -t aci-tutorial-app
Sending build context to Docker daemon  119.3kB
Step 1/6 : FROM node:8.9.3-alpine
8.9.3-alpine: Pulling from library/node
88286f41530e: Pull complete
84f3a4bf8410: Pull complete
d0d9b2214720: Pull complete
Digest: sha256:c73277ccc763752b42bb2400d1aaecb4e3d32e3a9dbedd0e49885c71bea07354
Status: Downloaded newer image for node:8.9.3-alpine
 ---> 90f5ee24bee2
...
Step 6/6 : CMD node /usr/src/app/index.js
 ---> Running in f4a1ea099eec
 ---> 6edad76d09e9
Removing intermediate container f4a1ea099eec
Successfully built 6edad76d09e9
Successfully tagged aci-tutorial-app:latest

Use el comando docker images para ver la imagen compilada:

docker images

La imagen recién compilada debería aparecer en la lista:

docker images
REPOSITORY          TAG       IMAGE ID        CREATED           SIZE
aci-tutorial-app    latest    5c745774dfa9    39 seconds ago    68.1 MB

Ejecute el contenedor localmente

Antes de implementar el contenedor en Azure Container Instances, use docker run para ejecutarlo localmente y confirmar que funciona. El modificador -d permite que el contenedor se ejecute en segundo plano, mientras que -p permite asignar un puerto arbitrario del equipo al puerto 80 del contenedor.

docker run -d -p 8080:80 aci-tutorial-app

La salida del comando docker run muestra el identificador del contenedor en ejecución si el comando se realizó correctamente:

docker run -d -p 8080:80 aci-tutorial-app
```output
a2e3e4435db58ab0c664ce521854c2e1a1bda88c9cf2fcff46aedf48df86cccf

Ahora, vaya a http://localhost:8080 en el explorador para confirmar que el contenedor está en ejecución. Debería ver una página web similar a la siguiente:

Ejecución local de la aplicación en el explorador

Pasos siguientes

En este tutorial, ha creado una imagen de contenedor que se puede implementar en Azure Container Instances y ha comprobado qu8e funciona localmente. Hasta ahora, esto es lo que ha hecho:

  • Se ha clonado el origen de la aplicación desde GitHub
  • Ha creado una imagen de contenedor a partir del origen de la aplicación
  • El contenedor se ha probado localmente

Pase al siguiente tutorial de la serie para aprender a almacenar imágenes de contenedor en Azure Container Registry: