¿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 |
versión: "2" servicios: db: imagen: arungupta/couchbase:última puertos: - 8091:8091 - 8092:8092 - 8093:8093 - 11210:11210 |
Esta definición se puede iniciar en un motor Docker sin modo Swarm como:
1 |
docker-componer arriba |
Esto iniciará una única réplica del servicio definido en el archivo Compose. Este servicio se puede escalar como:
1 |
docker-componer escala 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 |
ADVERTENCIA: En Docker Motor usted're utilizando es corriendo en enjambre modo. Componga hace no utilice enjambre modo a despliegue servicios a varios nodos en a enjambre. Todos contenedores se sea programado en el actual nodo. A despliegue su aplicación a través de el enjambre, utilice `docker pila despliegue`. |
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 |
versión: "3" servicios: db: imagen: arungupta/couchbase:última puertos: - 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 enjambre 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 pila despliegue --componer-archivo=docker-componer.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 NOMBRE MODO RÉPLICAS IMAGEN 05wa4y2he9w5 couchbase_db replicado 1/1 arungupta/couchbase:última |
La lista de contenedores que se ejecutan dentro del servicio puede verse utilizando docker service ps
mando:
1 2 |
ID NOMBRE IMAGEN NODO DESEADO ESTADO ACTUAL ESTADO ERROR PUERTOS rchu2uykeuuj couchbase_db.1 arungupta/couchbase:última moby Ejecutar Ejecutar 52 segundos hace |
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 servicio escala couchbase_db=2 |
La lista de contenedores puede verse entonces de nuevo como:
1 2 3 |
ID NOMBRE IMAGEN NODO DESEADO ESTADO ACTUAL ESTADO ERROR PUERTOS rchu2uykeuuj couchbase_db.1 arungupta/couchbase:última moby Ejecutar Ejecutar 3 minutos hace kjy7l14weao8 couchbase_db.2 arungupta/couchbase:última moby Ejecutar Ejecutar 23 segundos hace |
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 | ++ configure -m couchbase_db.1.rchu2uykeuuj@moby | ++ dormir 15 couchbase_db.1.rchu2uykeuuj@moby | ++ /punto de entrada.sh couchbase-servidor couchbase_db.2.kjy7l14weao8@moby | ++ configure -m couchbase_db.2.kjy7l14weao8@moby | ++ dormir 15 couchbase_db.1.rchu2uykeuuj@moby | Inicio Couchbase Servidor -- Web INTERFAZ DE USUARIO disponible en http://:8091 y registros disponibles en /opt/couchbase/var/lib/couchbase/logs couchbase_db.1.rchu2uykeuuj@moby | ++ rizo -v -X POST http://127.0.0.1:8091/pools/default -d memoryQuota=300 -d indexMemoryQuota=300 couchbase_db.2.kjy7l14weao8@moby | ++ /punto de entrada.sh couchbase-servidor couchbase_db.2.kjy7l14weao8@moby | Inicio Couchbase Servidor -- Web INTERFAZ DE USUARIO disponible en http://:8091 y registros disponibles en /opt/couchbase/var/lib/couchbase/logs . . . couchbase_db.1.rchu2uykeuuj@moby | ++ '[' '' = TRABAJADOR ']' couchbase_db.2.kjy7l14weao8@moby | Contenido-Tipo: aplicación/json couchbase_db.1.rchu2uykeuuj@moby | ++ fg 1 couchbase_db.2.kjy7l14weao8@moby | Contenido-Longitud: 152 couchbase_db.1.rchu2uykeuuj@moby | /punto de entrada.sh couchbase-servidor couchbase_db.2.kjy7l14weao8@moby | Caché-Controlar: no-caché couchbase_db.2.kjy7l14weao8@moby | couchbase_db.2.kjy7l14weao8@moby | ++ echo 'Tipo: ' couchbase_db.2.kjy7l14weao8@moby | ++ '[' '' = TRABAJADOR ']' couchbase_db.2.kjy7l14weao8@moby | ++ fg 1 couchbase_db.2.kjy7l14weao8@moby | {"storageMode":"memoria_optimizada","indexerThreads":0,"memorySnapshotInterval":200,"stableSnapshotInterval":5000,"maxRollbackPoints":5,"logLevel":"info"}Tipo: couchbase_db.2.kjy7l14weao8@moby | /punto de entrada.sh couchbase-servidor |
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?