Probablemente sea útil comenzar con algunas definiciones:
- docker-compose : comando utilizado para configurar y administrar un grupo de contenedores relacionados. Es una interfaz de la misma API utilizada por la docker cli, por lo que puede reproducir su comportamiento con comandos como
docker run
.
- docker-compose.yml : archivo de definición para un grupo de contenedores, utilizado por docker-compose y ahora también por el modo swarm.
- Modo de enjambre : se utiliza para administrar un grupo de motores de ventana acoplable como una sola entidad y proporcionar orquestación (tratando constantemente de corregir cualquier diferencia entre el estado actual y el estado de destino).
- servicio : uno o más contenedores para la misma imagen y configuración dentro del enjambre, múltiples contenedores proporcionan escalabilidad.
- pila : uno o más servicios dentro de un enjambre, estos pueden definirse usando un DAB o un archivo docker-compose.yml.
- red puente : red administrada por un solo motor de ventana acoplable donde varios contenedores pueden comunicarse entre sí. Puede tener varias redes administradas por un motor y los contenedores se pueden conectar a cero o más redes.
- red superpuesta : similar a una red puente pero que abarca varios motores de ventana acoplable. Estos requieren un almacén de clave / valor para mantener su estado. El modo enjambre proporciona esto, pero si el modo enjambre está desactivado, también puede usar etcd, cónsul o guardián del zoológico.
- enlaces : un método para conectar contenedores que es anterior a la red puenteada. Ya no se recomienda su uso.
- enjambre clásico : un predecesor del modo enjambre integrado que se ejecuta como un contenedor, permite que varios motores aparezcan como uno, pero no proporciona orquestación ni incluye su propio almacén de k / v.
Para responder a las preguntas:
¿Docker-swarm ha tenido éxito en docker-compose y las redes de superposición son la nueva forma (recomendada) de conectar contenedores?
¿O es que docker-compose sigue siendo una parte integral de toda la familia de docker y se espera y es aconsejable usarlo para conectar contenedores para trabajar en colaboración? Si es así, ¿Docker-compose funciona con contenedores en diferentes nodos en el enjambre?
Proporcionan una funcionalidad diferente y seguirán cumpliendo un propósito. docker-compose no puede iniciar contenedores dentro del modo swarm, pero se puede usar una versión más reciente del archivo docker-compose.yml (versión 3) para definir una pila directamente en modo swarm sin usar docker-compose. docker-compose es necesario para administrar contenedores fuera del modo de enjambre, en un solo motor de docker o con enjambre clásico.
¿O es que las redes superpuestas sirven para conectar contenedores a través de diferentes hosts en el enjambre y Docker-compose es para crear enlaces internos?
Además, también veo que se menciona en la documentación de la ventana acoplable que los enlaces ya no se recomiendan y que pronto serán obsoletos.
docker-compose, que comienza con la versión 2 del archivo yml, conecta varios contenedores de forma predeterminada con una nueva red puenteada por proyecto (el proyecto tiene por defecto el nombre del directorio). Con el enjambre clásico, eso sería predeterminado en una red superpuesta usando una tienda k / v externa. Y con una pila de modo de enjambre, esta sería una red superpuesta.
El uso de redes acoplables es la forma preferida de que los contenedores se comuniquen entre sí. Desea una red por grupo de contenedores que desea aislar del resto de su entorno de Docker. docker-compose automatiza esta creación de red, pero también puede hacerlo desde la línea de comandos con docker networks create
.
Los enlaces han sido reemplazados en gran medida por redes acoplables con descubrimiento de DNS incorporado. Cuando elimina enlaces de su docker-compose.yml, es posible que deba reemplazarlos con una depends_on
sección para hacer cumplir el orden de inicio del contenedor. De lo contrario, hay muy pocos escenarios en los que la vinculación tenga sentido y todo el uso que he visto proviene de alguien que sigue documentación desactualizada.