¿Docker Swarm frente a Docker Compose? ¡Ahora trabajan juntos! Docker 1.13 presentó una nueva versión de Docker Compose. La principal característica de esta versión es que permite que los servicios definidos mediante archivos Docker Compose se desplieguen directamente en Docker Engine habilitado con el modo Swarm. Docker Swarm con Docker Compose permite el despliegue simplificado de aplicaciones multicontenedor en múltiples hosts.
Este blog muestra cómo un simple archivo Docker Swarm y Docker Compose muestran cómo se crean y despliegan los servicios en Docker 1.13.
Aquí hay una definición de Docker Compose v2 para iniciar un nodo de base de datos Couchbase:
|
1 2 3 4 5 6 7 8 9 |
version: "2" services: db: image: arungupta/couchbase:latest ports: - 8091:8091 - 8092:8092 - 8093:8093 - 11210:11210 |
Esta definición se puede iniciar en un motor Docker sin modo Swarm como:
|
1 |
docker-compose up |
Esto iniciará una única réplica del servicio definido en el archivo Compose. Este servicio se puede escalar como:
|
1 |
docker-compose scale db=2 |
Esto funcionaría bien en un solo host. Si el modo enjambre está habilitado en el motor Docker, entonces muestra el mensaje:
|
1 2 3 4 5 |
WARNING: The Docker Engine you're using is running in swarm mode. Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node. To deploy your application across the swarm, use `docker stack deploy`. |
Docker Compose nos ofrece aplicaciones multicontenedor, pero las aplicaciones siguen estando restringidas a un único host. Y eso es un único punto de fallo. Docker Compose en modo Swarm permite crear un cluster de Docker Engines. Con 1.13, docker stack deploy se puede utilizar para desplegar un archivo Docker Compose en modo Docker Swarm. Este es un ejemplo de definición de Docker Compose v3:
|
1 2 3 4 5 6 7 8 9 |
version: "3" services: db: image: arungupta/couchbase:latest ports: - 8091:8091 - 8092:8092 - 8093:8093 - 11210:11210 |
Como puede ver, el único cambio es el valor de versión atributo. Existen otros cambios en Docker Compose v3. Lea también diferentes versiones de Docker Compose y cómo actualización de v2 a v3. Habilitar Docker Compose con modo enjambre:
|
1 |
docker swarm init |
Otros nodos pueden unirse a este cluster swarm y esto permitiría fácilmente desplegar la aplicación multi-contenedor a un multi-host también. Utilice Docker para desplegar los servicios en Swarm definidos en el archivo Compose como:
|
1 |
docker stack deploy --compose-file=docker-compose.yml couchbase |
Un valor por defecto de Componer archivo aquí haría el comando un poco más corto. #30352 debería encargarse de ello. La lista de servicios en ejecución puede verificarse mediante docker service ls mando:
|
1 2 |
ID NAME MODE REPLICAS IMAGE 05wa4y2he9w5 couchbase_db replicated 1/1 arungupta/couchbase:latest |
La lista de contenedores que se ejecutan dentro del servicio puede verse utilizando docker service ps mando:
|
1 2 |
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS rchu2uykeuuj couchbase_db.1 arungupta/couchbase:latest moby Running Running 52 seconds ago |
En este caso, un único contenedor se está ejecutando como parte del servicio. El nodo aparece como moby que es el nombre por defecto del motor Docker que se ejecuta utilizando Docker para Mac. El servicio ahora se puede escalar como:
|
1 |
docker service scale couchbase_db=2 |
La lista de contenedores puede verse entonces de nuevo como:
|
1 2 3 |
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS rchu2uykeuuj couchbase_db.1 arungupta/couchbase:latest moby Running Running 3 minutes ago kjy7l14weao8 couchbase_db.2 arungupta/couchbase:latest moby Running Running 23 seconds ago |
Tenga en cuenta que los contenedores reciben el nombre utilizando el formato _n. Ambos contenedores se ejecutan en el mismo host. También hay que tener en cuenta que los dos contenedores son nodos Couchbase independientes y no están configurados en un cluster todavía. Esto ya se ha explicado en Cluster Couchbase usando Docker y pronto se actualizarán los pasos. Un servicio suele tener varios contenedores ejecutándose en varios hosts. Docker 1.13 introduce un nuevo comando registros del servicio docker para transmitir el registro de servicio a través de todos los contenedores en todos los hosts a su consola. En nuestro caso, esto se puede ver usando el comando docker service logs couchbase_db y parece:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
couchbase_db.1.rchu2uykeuuj@moby | ++ set -m couchbase_db.1.rchu2uykeuuj@moby | ++ sleep 15 couchbase_db.1.rchu2uykeuuj@moby | ++ /entrypoint.sh couchbase-server couchbase_db.2.kjy7l14weao8@moby | ++ set -m couchbase_db.2.kjy7l14weao8@moby | ++ sleep 15 couchbase_db.1.rchu2uykeuuj@moby | Starting Couchbase Server -- Web UI available at https://:8091 and logs available in /opt/couchbase/var/lib/couchbase/logs couchbase_db.1.rchu2uykeuuj@moby | ++ curl -v -X POST https://127.0.0.1:8091/pools/default -d memoryQuota=300 -d indexMemoryQuota=300 couchbase_db.2.kjy7l14weao8@moby | ++ /entrypoint.sh couchbase-server couchbase_db.2.kjy7l14weao8@moby | Starting Couchbase Server -- Web UI available at https://:8091 and logs available in /opt/couchbase/var/lib/couchbase/logs . . . couchbase_db.1.rchu2uykeuuj@moby | ++ '[' '' = WORKER ']' couchbase_db.2.kjy7l14weao8@moby | Content-Type: application/json couchbase_db.1.rchu2uykeuuj@moby | ++ fg 1 couchbase_db.2.kjy7l14weao8@moby | Content-Length: 152 couchbase_db.1.rchu2uykeuuj@moby | /entrypoint.sh couchbase-server couchbase_db.2.kjy7l14weao8@moby | Cache-Control: no-cache couchbase_db.2.kjy7l14weao8@moby | couchbase_db.2.kjy7l14weao8@moby | ++ echo 'Type: ' couchbase_db.2.kjy7l14weao8@moby | ++ '[' '' = WORKER ']' couchbase_db.2.kjy7l14weao8@moby | ++ fg 1 couchbase_db.2.kjy7l14weao8@moby | {"storageMode":"memory_optimized","indexerThreads":0,"memorySnapshotInterval":200,"stableSnapshotInterval":5000,"maxRollbackPoints":5,"logLevel":"info"}Type: couchbase_db.2.kjy7l14weao8@moby | /entrypoint.sh couchbase-server |
El preámbulo de la sentencia log utiliza el formato .@. Y luego aparece el mensaje de registro real de su contenedor. A primera vista, adjuntar el id del contenedor puede parecer redundante. Pero Servicios Docker son auto-reparables. Esto significa que si un contenedor muere, el motor Docker iniciará otro contenedor para garantizar el número especificado de réplicas en un momento dado. Este nuevo contenedor tendrá un nuevo id. Y por lo tanto permite adjuntar el mensaje de registro del contenedor correcto. Así que una rápida comparación de comandos:
| Docker Compose v2 | Docker compose v3 | |
|---|---|---|
| Iniciar los servicios | docker-compose up -d |
docker stack deploy --compose-file=docker-compose.yml |
| Servicio de escala | docker-compose scale = |
docker service scale = |
| Cierre | docker-compose down |
docker stack rm |
| Multihost | No | Sí |
¿Quieres empezar a usar Couchbase? Mira en Kits de inicio de Couchbase. ¿Quieres saber más sobre cómo ejecutar Couchbase en contenedores?
