Compartir comentarios
Las respuestas se generan en base a la documentación.

Despliega en Swarm

Note

El 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 info y buscando el mensaje Swarm: active (es posible que tengas que desplazarte un poco hacia arriba).

    Si Swarm no se está ejecutando, escribe docker swarm init en 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:

Note

El comando docker stack deploy utiliza 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 comando docker 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

  1. Despliega tu aplicación en Swarm:

    $ docker stack deploy -c bb-stack.yaml demo
    

    Si 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-app

    Ten 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.

  2. Asegúrate de que todo ha funcionado listando tu servicio:

    $ docker service ls
    

    Si 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/tcp

    Esto 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.

  3. 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.

  4. 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í: