Tutorial: Implementación de un grupo de varios contenedores mediante Docker Compose
En este tutorial, usará Docker Compose para definir y ejecutar una aplicación de varios contenedores de forma local y, a continuación, implementarla como un grupo de contenedores en Azure Container Instances.
Ejecute los contenedores en Azure Container Instances a petición cuando desarrolle aplicaciones nativas en la nube y quiera cambiar sin problemas entre el desarrollo local y la implementación en la nube. La integración entre Docker y Azure habilita esta capacidad. Puede usar los comandos nativos de Docker para ejecutar una única instancia de contenedor o un grupo de varios contenedores en Azure.
Importante
No se admiten todas las características de Azure Container Instances. Proporcione comentarios sobre la integración entre Docker y Azure mediante la creación de una incidencia en el repositorio de GitHub de integración de Docker ACI.
Sugerencia
Puede usar la extensión de Docker para Visual Studio Code para obtener una experiencia integrada para desarrollar, ejecutar y administrar contenedores, imágenes y contextos.
En este artículo:
- Creación de una instancia de Azure Container Registry
- Clonar el código fuente de la aplicación desde GitHub
- Usar Docker Compose para compilar una imagen y ejecutar una aplicación de varios contenedores de forma local.
- Inserir la imagen de la aplicación en el registro de contenedor.
- Crear un contexto de Azure para Docker.
- Llevar la aplicación a Azure Container Instances.
Requisitos previos
CLI de Azure: debe tener la CLI de Azure instalada en el equipo local. Se recomienda la versión 2.10.1 o posterior. Ejecute
az --versionpara encontrar la versión. Si necesita instalarla o actualizarla, consulte Instalación de la CLI de Azure.Docker Desktop: debe usar Docker Desktop versión 2.3.0.5 o posterior, disponible para Windows o macOS. O bien, instale la CLI de integración de Docker ACI para Linux.
Creación de una instancia de Azure Container Registry
Antes de crear el registro de contenedor, necesita un grupo de recursos en donde implementarlo. Un grupo de recursos es una colección lógica en la que se implementan y administran todos los recursos de Azure.
Para crear un grupo de recursos, use el comando az group create. En el siguiente ejemplo, se crea un grupo de recursos denominado myResourceGroup en la región eastus:
az group create --name myResourceGroup --location eastus
Cuando se haya creado el grupo de recursos, cree un registro de contenedor de Azure con el comando az acr create. El nombre del registro de contenedor debe ser único dentro de Azure y contener entre 5 y 50 caracteres alfanuméricos. Reemplace <acrName> por un nombre único para el registro:
az acr create --resource-group myResourceGroup --name <acrName> --sku Basic
Esta es la salida parcial de una nueva instancia de Azure Container Registry denominada mycontainerregistry082:
{
"creationDate": "2020-07-16T21:54:47.297875+00:00",
"id": "/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/mycontainerregistry082",
"location": "eastus",
"loginServer": "mycontainerregistry082.azurecr.io",
"name": "mycontainerregistry082",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sku": {
"name": "Basic",
"tier": "Basic"
},
"status": null,
"storageAccount": null,
"tags": {},
"type": "Microsoft.ContainerRegistry/registries"
}
En el resto del tutorial se hace referencia a <acrName> como marcador de posición del nombre del registro de contenedor que eligió en este paso.
Inicio de sesión en el registro de contenedor
Debe iniciar sesión en la instancia de Azure Container Registry antes de insertar imágenes en ella. Use el comando az acr login para completar la operación. Debe especificar el nombre único que eligió para el registro de contenedor cuando lo creó.
az acr login --name <acrName>
Por ejemplo:
az acr login --name mycontainerregistry082
El comando devuelve Login Succeeded una vez completado:
Login Succeeded
Obtención del código de la aplicación
La aplicación de ejemplo que se usa en este tutorial es una aplicación básica para votar. La aplicación consta de un componente web front-end y de una instancia back-end de Redis. El componente web se empaqueta en una imagen de contenedor personalizada. La instancia de Redis usa una imagen sin modificar de Docker Hub.
Use git para clonar la aplicación en su entorno de desarrollo:
git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
Cambie al directorio clonado.
cd azure-voting-app-redis
En el directorio se encuentra el código fuente de la aplicación, un archivo de Docker Compose creado previamente y un archivo docker-compose.yaml.
Modificación del archivo de Docker Compose
Abra el archivo docker-compose.yaml en un editor de texto. El archivo configura los servicios azure-vote-back y azure-vote-front.
version: '3'
services:
azure-vote-back:
image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
container_name: azure-vote-back
environment:
ALLOW_EMPTY_PASSWORD: "yes"
ports:
- "6379:6379"
azure-vote-front:
build: ./azure-vote
image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
container_name: azure-vote-front
environment:
REDIS: azure-vote-back
ports:
- "8080:80"
En la configuración azure-vote-front, realice los dos cambios siguientes:
- Actualice la propiedad
imageen el servicioazure-vote-front. Use como prefijo del nombre de la imagen el nombre del servidor de inicio de sesión de Azure Container Registry, <acrName>.azurecr.io. Por ejemplo, si el registro se denomina myregistry, el nombre del servidor de inicio de sesión es myregistry.azurecr.io (todo en minúsculas) y la propiedad de imagen esmyregistry.azurecr.io/azure-vote-front. - Cambie la asignación de
portsa80:80. Guarde el archivo.
El archivo actualizado debe ser parecido al siguiente:
version: '3'
services:
azure-vote-back:
image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
container_name: azure-vote-back
environment:
ALLOW_EMPTY_PASSWORD: "yes"
ports:
- "6379:6379"
azure-vote-front:
build: ./azure-vote
image: myregistry.azurecr.io/azure-vote-front
container_name: azure-vote-front
environment:
REDIS: azure-vote-back
ports:
- "80:80"
Al realizar estas sustituciones, la imagen de azure-vote-front que se crea en el paso siguiente se etiqueta para Azure Container Registry y se puede extraer para ejecutarse en Azure Container Instances.
Sugerencia
No tiene que usar Azure Container Registry para este escenario. Por ejemplo, puede elegir un repositorio privado en Docker Hub para hospedar la imagen de la aplicación. Si elige un registro diferente, actualice la propiedad de imagen correctamente.
Ejecución local de una aplicación de varios contenedores
Ejecute el archivo docker-compose up, que usa el archivo docker-compose.yaml para compilar la imagen de contenedor, descargue la imagen de Redis e inicie la aplicación:
docker-compose up --build -d
Cuando haya finalizado, use el comando docker images para ver las imágenes creadas. Se han descargado o creado tres imágenes. La imagen azure-vote-front contiene la aplicación de front-end y usa la imagen uwsgi-nginx-flask como base. La imagen redis se usa para iniciar una instancia de Redis.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myregistry.azurecr.io/azure-vote-front latest 9cc914e25834 40 seconds ago 944MB
mcr.microsoft.com/oss/bitnami/redis 6.0.8 3a54a920bb6c 4 weeks ago 103MB
tiangolo/uwsgi-nginx-flask python3.6 788ca94b2313 9 months ago 9444MB
Ejecute el comando docker ps para ver los contenedores en ejecución:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82411933e8f9 myregistry.azurecr.io/azure-vote-front "/entrypoint.sh /sta…" 57 seconds ago Up 30 seconds 443/tcp, 0.0.0.0:80->80/tcp azure-vote-front
b62b47a7d313 mcr.microsoft.com/oss/bitnami/redis:6.0.8 "/opt/bitnami/script…" 57 seconds ago Up 30 seconds 0.0.0.0:6379->6379/tcp azure-vote-back
Para ver la aplicación en ejecución, escriba http://localhost:80 en un explorador web local. Se carga la aplicación de ejemplo, como se muestra en el ejemplo siguiente:
Después de probar la aplicación local, ejecute docker-compose down para detener la aplicación y quitar los contenedores.
docker-compose down
Inserción de imágenes en Container Registry
Para implementar la aplicación en Azure Container Instances, es preciso que inserte la imagen de azure-vote-front en el registro de contenedor. Ejecute docker-compose push para insertar la imagen:
docker-compose push
La inserciones en el registro puede tardar unos minutos.
Para comprobar que la imagen está almacenada en el registro, ejecute el comando az acr repository show:
az acr repository show --name <acrName> --repository azure-vote-front
Creación de un contexto de Azure
Para usar los comandos de Docker para ejecutar contenedores en Azure Container Instances, primero inicie sesión en Azure:
docker login azure
Cuando se le solicite, escriba o seleccione sus credenciales de Azure.
Cree un contexto ACI; para ello, ejecute docker context create aci. Este contexto asocia Docker con una suscripción de Azure y un grupo de recursos para que pueda crear y administrar las instancias de contenedor. Por ejemplo, para crear un contexto llamado myacicontext:
docker context create aci myacicontext
Cuando se le solicite, seleccione el id. de suscripción de Azure y después seleccione un grupo de recursos existente o cree un nuevo grupo de recursos. Si elige un nuevo grupo de recursos, se creará con un nombre generado por el sistema. Las instancias de contenedores de Azure, al igual que otros recursos de Azure, se deben implementar en un grupo de recursos. Los grupos de recursos le permiten organizar y administrar los recursos relacionados de Azure.
Ejecute docker context ls para confirmar que agregó el contexto de ACI a los contextos de Docker:
docker context ls
Implementación de una aplicación en Azure Container Instances
A continuación, cambie al contexto de ACI. Los comandos de Docker subsiguientes se ejecutarán en este contexto.
docker context use myacicontext
Ejecute docker compose up para iniciar la aplicación en Azure Container Instances. La imagen de azure-vote-front se extrae del registro de contenedor y el grupo de contenedores se crea en Azure Container Instances.
docker compose up
Nota
Los comandos de Docker Compose disponibles actualmente en un contexto de ACI son docker compose up y docker compose down. No hay ningún guion entre docker y compose en estos comandos.
En poco tiempo, se implementa el grupo de contenedores. Salida del ejemplo:
[+] Running 3/3
⠿ Group azurevotingappredis Created 3.6s
⠿ azure-vote-back Done 10.6s
⠿ azure-vote-front Done 10.6s
Ejecute docker ps para ver los contenedores en ejecución y la dirección IP asignada al grupo de contenedores.
docker ps
Salida del ejemplo:
CONTAINER ID IMAGE COMMAND STATUS PORTS
azurevotingappredis_azure-vote-back mcr.microsoft.com/oss/bitnami/redis:6.0.8 Running 52.179.23.131:6379->6379/tcp
azurevotingappredis_azure-vote-front myregistry.azurecr.io/azure-vote-front Running 52.179.23.131:80->80/tcp
Para ver la aplicación en ejecución en la nube, escriba la dirección IP mostrada en un explorador web local. En este ejemplo, escriba 52.179.23.131. Se carga la aplicación de ejemplo, como se muestra en el ejemplo siguiente:
Para ver los registros del contenedor de front-end, ejecute el comando docker logs. Por ejemplo:
docker logs azurevotingappredis_azure-vote-front
También puede usar Azure Portal u otras herramientas de Azure para ver las propiedades y el estado del grupo de contenedores que ha implementado.
Cuando termine de probar la aplicación, detenga la aplicación y los contenedores con docker compose down:
docker compose down
Este comando elimina el grupo de contenedores de Azure Container Instances.
Pasos siguientes
En este tutorial, ha usado Docker Compose para pasar de ejecutar una aplicación de varios contenedores localmente a ejecutarla en Azure Container Instances. Ha aprendido a:
- Creación de una instancia de Azure Container Registry
- Clonar el código fuente de la aplicación desde GitHub
- Usar Docker Compose para compilar una imagen y ejecutar una aplicación de varios contenedores de forma local.
- Inserir la imagen de la aplicación en el registro de contenedor.
- Crear un contexto de Azure para Docker.
- Llevar la aplicación a Azure Container Instances.
También puede usar la extensión de Docker para Visual Studio Code para obtener una experiencia integrada para desarrollar, ejecutar y administrar contenedores, imágenes y contextos.
Si quiere aprovechar más características de Azure Container Instances, use las herramientas de Azure para especificar un grupo de varios contenedores. Por ejemplo, consulte los tutoriales para implementar un grupo de contenedores mediante la CLI de Azure con un archivo YAML, o bien realice la implementación con una plantilla de Azure Resource Manager.