Despliega en Swarm
NoteEl modo Swarm es una característica avanzada para gestionar un clúster de demonios de Docker.
Usa el modo Swarm si tienes la intención de utilizar Swarm como entorno de ejecución en producción.
Si no planeas realizar el despliegue con Swarm, utiliza Docker Compose en su lugar. Si estás desarrollando para un despliegue en Kubernetes, considera usar la funcionalidad integrada de Kubernetes en Docker Desktop.
Requisitos previos
Descarga e instala Docker Desktop como se describe en Obtener Docker.
Realiza la contenedorización de una aplicación en la parte 2 del taller de Docker
Asegúrate de que Swarm está habilitado en tu Docker Desktop escribiendo
docker system infoy buscando el mensajeSwarm: active(es posible que tengas que desplazarte un poco hacia arriba).Si Swarm no se está ejecutando, escribe
docker swarm initen una consola para configurarlo.
Introducción
Ahora que has demostrado que los componentes individuales de tu aplicación se ejecutan como contenedores independientes y has visto cómo desplegarla usando Kubernetes, puedes ver cómo organizarlos para que sean gestionados por Docker Swarm. Swarm proporciona muchas herramientas para escalar, conectar en red, proteger y mantener tus aplicaciones contenedorizadas, más allá de las capacidades de los contenedores por sí mismos.
Para validar que tu aplicación contenedorizada funciona bien en Swarm, utilizarás el entorno Swarm integrado de Docker Desktop directamente en tu máquina de desarrollo para desplegar tu aplicación, antes de entregarla para que se ejecute en un clúster de Swarm completo en producción. El entorno Swarm creado por Docker Desktop es completo, lo que significa que tiene todas las características de Swarm de las que disfrutará tu aplicación en un clúster real, accesibles desde la comodidad de tu máquina de desarrollo.
Describir aplicaciones usando archivos stack
Swarm nunca crea contenedores individuales como hiciste en el paso anterior de este tutorial. En su lugar, todas las cargas de trabajo de Swarm se programan como servicios, que son grupos escalables de contenedores con características de red adicionales mantenidas automáticamente por Swarm. Además, todos los objetos de Swarm pueden y deben describirse en manifiestos llamados archivos stack (de pila). Estos archivos YAML describen todos los componentes y configuraciones de tu aplicación Swarm, y pueden utilizarse para crear y destruir tu aplicación en cualquier entorno Swarm.
Ahora puedes escribir un archivo stack sencillo para ejecutar y gestionar tu aplicación Todo, la imagen de contenedor getting-started creada en la Parte 2 del tutorial. Coloca lo siguiente en un archivo llamado bb-stack.yaml:
NoteEl comando
docker stack deployutiliza el formato heredado versión 3 del archivo Compose, utilizado por Compose V1. El formato definido por la especificación de Compose no es compatible con el comandodocker stack deploy.Para obtener más información sobre la evolución de Compose, consulta la Historia de Compose.
version: "3.7"
services:
bb-app:
image: getting-started
ports:
- "8000:3000"En este archivo YAML de Swarm, hay un objeto, un service, que describe un grupo escalable de contenedores idénticos. En este caso, obtendrás solo un contenedor (el valor predeterminado), y ese contenedor se basará en tu imagen getting-started creada en la Parte 2 del tutorial. Además, has solicitado a Swarm que reenvíe todo el tráfico que llegue al puerto 8000 en tu máquina de desarrollo al puerto 3000 dentro del contenedor getting-started.
Los servicios de Kubernetes y los servicios de Swarm son muy diferentes
A pesar del nombre similar, los dos orquestadores entienden cosas muy diferentes por el término "servicio". En Swarm, un servicio proporciona tanto facilidades de programación (scheduling) como de red, creando contenedores y proporcionando herramientas para enrutar el tráfico hacia ellos. En Kubernetes, la programación y la red se gestionan por separado; los despliegues (u otros controladores) gestionan la programación de contenedores como pods, mientras que los servicios son responsables únicamente de añadir características de red a esos pods.
Desplegar y comprobar tu aplicación
Despliega tu aplicación en Swarm:
$ docker stack deploy -c bb-stack.yaml demoSi todo va bien, Swarm informará de la creación de todos los objetos de tu pila sin quejas:
Creating network demo_default Creating service demo_bb-appTen en cuenta que, además de tu servicio, Swarm también crea una red de Docker de forma predeterminada para aislar los contenedores desplegados como parte de tu pila.
Asegúrate de que todo ha funcionado listando tu servicio:
$ docker service lsSi todo ha ido bien, tu servicio informará que se han creado 1/1 de sus réplicas:
ID NAME MODE REPLICAS IMAGE PORTS il7elwunymbs demo_bb-app replicated 1/1 getting-started:latest *:8000->3000/tcpEsto indica que 1/1 contenedores que solicitaste como parte de tus servicios están activos y ejecutándose. Además, ves que el puerto 8000 en tu máquina de desarrollo se está reenviando al puerto 3000 en tu contenedor
getting-started.Abre un navegador y visita tu aplicación Todo en
localhost:8000; deberías ver tu aplicación Todo, al igual que cuando la ejecutaste como un contenedor independiente en la Parte 2 del tutorial.Una vez que estés conforme, elimina tu aplicación:
$ docker stack rm demo
Conclusión
En este punto, has desplegado con éxito tu aplicación utilizando Docker Desktop en un entorno Swarm completo en tu máquina de desarrollo. Ahora puedes añadir otros componentes a tu aplicación y aprovechar todas las características y el poder de Swarm, directamente en tu propia máquina.
Además de desplegar en Swarm, también has descrito tu aplicación como un archivo stack. Este simple archivo de texto contiene todo lo necesario para crear tu aplicación en un estado de ejecución; puedes guardarlo en el control de versiones y compartirlo con tus colegas, lo que te ayuda a distribuir tus aplicaciones a otros clústeres (como los clústeres de prueba y producción que probablemente vengan después de tus entornos de desarrollo).
Referencias de Swarm y CLI
Encontrarás más documentación para todos los nuevos objetos de Swarm y comandos de CLI utilizados en este artículo aquí: