¿Cuál es la diferencia entre Docker Compose y Docker Stack?


Respuesta 1:

La pila Docker ignora las instrucciones de "compilación". No puede construir nuevas imágenes con los comandos de pila. Necesita imágenes preconstruidas para existir. Por lo tanto, docker-compose es más adecuado para escenarios de desarrollo.

También hay partes de la especificación de componer archivo que son ignoradas por docker-compose o los comandos de la pila. (Busque "ignorar" en esa página para ver más detalles).

Docker Compose es un proyecto de Python. Originalmente, había un proyecto de Python conocido como fig que se usaba para analizar archivos fig.yml para mostrar, lo adivinaste, pilas de contenedores Docker. A todos les encantó, especialmente a la gente de Docker, por lo que se reencarnó a medida que Docker componía para estar más cerca del producto. Pero todavía estaba en Python, operando sobre el Docker Engine.

Internamente, utiliza la API de Docker para mostrar contenedores de acuerdo con una especificación. Aún debe instalar docker-compose por separado para usarlo con Docker en su máquina.

La funcionalidad Docker Stack se incluye con el motor Docker. No necesita instalar paquetes adicionales para usarlo. La implementación de pilas de acopladores es parte del modo enjambre. Admite los mismos tipos de archivos de composición, pero el manejo ocurre en el código Go, dentro del motor Docker. También debe crear un "enjambre" de una máquina antes de poder usar el comando de pila, pero eso no es un gran problema.

Docker stack no admite archivos docker-compose.yml que están escritos de acuerdo con la especificación de la versión 2. Tiene que ser el más reciente, que es 3 en el momento de la escritura, mientras que Docker Compose aún puede manejar las versiones 2 y 3 sin problemas.


Respuesta 2:

Diferencias clave entre docker stack y docker-compose

Lenguaje de programación

Docker-compose en base a Python, mientras que Docker stack viene con una instalación estándar de Docker. Lo más probable es que docker-composer pueda quedar en desuso y la pila de docker será compatible a largo plazo.

Versión del archivo de descripción

Docker-compose es compatible con la versión 2 y superiores de los archivos de compilación .yml. Docker stack requiere al menos la versión 3.

Dependencia de enjambre

Docker stack requiere que se inicialice un enjambre antes de que se pueda implementar una aplicación

Nota: Un enjambre Docker es un grupo de máquinas que ejecutan el motor Docker y se unen en un clúster docker.

Docker-compose

Si ejecutamos docker-compose, vemos que los dos servicios se comunican hasta que lo detengamos. Curiosamente, hay una advertencia que destaca que Docker-compose no se puede usar para desplegar en un enjambre.

Docker stack

Como se dijo antes, necesitamos establecer una versión 3 en nuestro archivo de compilación .yml. Después de ese cambio, si asumimos que nuestra máquina acoplable aún no está en modo enjambre, podemos implementar nuestra aplicación con los dos comandos:

enjambre docker init

docker stack deploy -c docker-compose.yml mystackapp

Vemos que para nuestra pila se crearon una red y dos servicios.