Estoy tratando de comprender las diferencias o similitudes entre Docker-Compose y Docker-Swarm .
Al leer la documentación, he entendido que docker-compose proporciona un mecanismo para unir diferentes contenedores y trabajar en colaboración, como un solo servicio (supongo que está usando la misma funcionalidad que el comando --link utilizado para vincular dos contenedores)
Además, mi comprensión de docker-swarm es que le permite administrar un clúster de diferentes docker-hosts , cada uno de los cuales ejecuta varias instancias de contenedor de algunas imágenes de docker. Podríamos definir conexiones como redes superpuestas entre diferentes contenedores en el enjambre (incluso si se encuentran a través de dos docker-hosts en el enjambre) para conectarlos como una unidad.
Lo que estoy tratando de entender es si docker-swarm ha tenido éxito en el docker-compose y las redes superpuestas 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?
¿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.
¿¿¿Estoy un poco confundido???
¡Muchas gracias!
fuente
Respuestas:
Probablemente sea útil comenzar con algunas definiciones:
docker run
.Para responder a las preguntas:
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.
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.fuente
DAB
?Descubrirá que necesita usar todo lo anterior si está haciendo otra cosa que no sea una demostración en su computadora portátil, etc.
Deliberadamente separé las redes de superposición de enjambre y enjambre, porque no necesita usar ambas, pero no puede obtener una red de superposición sin tener un enjambre debajo de ella.
Redactar sirve para reunir varios contenedores. Ahora tiene sentido que estén relacionados entre sí, aunque puede que no lo estén. Pero supongamos un caso típico cuando los contenedores son para servicios que están relacionados entre sí, entonces querrá que se hablen entre sí de alguna manera, pero controlen cómo se comunican entre sí mediante redes. Por ejemplo, tome una aplicación de 3 niveles que tenga un servidor web, un servidor de aplicaciones y una base de datos. Supongamos que los tres componentes están acoplados y está utilizando componer para mostrarlos juntos en lugar de ejecutarlos.
docker run..
tres veces con diferentes parámetros, etc. Los tres aparecerían, pero querría controlar cómo se conectan entre sí. Desea que el servidor web pueda hablar con el servidor de aplicaciones, pero no directamente con la base de datos. Y querrá que el servidor de aplicaciones hable (haga ping) al contenedor del servidor db y también al servidor web. Todas las conexiones son bidireccionales, pero están restringidas solo a los servicios con los que desea poder comunicarse entre sí. Para tal arreglo, normalmente configuraría 2 redes, digamosfrontend
ybackend
. Los contenedores web y de aplicaciones están conectados a la red frontend. La aplicación y los contenedores de base de datos están conectados a la red de backend. Debido a que no existe una red común entre los contenedores db y web, no pueden tocarse (hacer ping) entre sí, que es su intención.Ahora, si desea que estos 3 servicios puedan ejecutarse en su clúster de cientos de máquinas, y también desea escalar entre ellos, necesitaría una red que abarque varios hosts. Ahí es donde entra en juego la superposición de redes (en enjambre). La superposición de redes no es más que una creación de redes de múltiples hosts sobre la tecnología VxLAN. No es necesario que conozca VxLAN, excepto que es una topología de red estándar que se admite en casi todas las infraestructuras de redes modernas.
Espero que aclare.
Editar: ¡No vi que ya recibieras una respuesta!
fuente
Creo que tienes la mayor parte del conocimiento correcto en cuanto a lo que es cada uno, pero se requieren algunos ajustes.
Tiene razón en docker-compose es abrir aplicaciones de varios contenedores. Antes solías hacer
docker run ..
para comenzar cada contenedor. Por lo general, las aplicaciones modernas que adoptan el paradigma de los microservicios pueden estar compuestas por docenas de servicios y su uso sedocker run ..
volverá muy tedioso muy pronto. Por lo tanto, docker-compose le permite expresar todos los contenedores y sus propiedades y cómo se conectan entre sí como un archivoyaml
ojson
para que pueda administrarlo de una manera más fácil.Entonces, docker-compose es la parte de orquestación de contenedores en el ecosistema de docker.
Los enlaces son diferentes, son solo una parte de los
docker run
comandos de docker-compose o y están obsoletos a favorsoftware defined networks
de los cualesoverlay networks
son solo uno de ellos.Swarm es el componente de programación en Docker. Qué es la programación: no es más que averiguar dónde "colocar" sus contenedores en su grupo de hosts de Docker. Puede tener un clúster de cientos de servidores y puede tener cientos de contenedores, cada uno de los cuales encapsula un servicio para una docena de aplicaciones diferentes. Ahora, ¿cómo deberían distribuirse estos contenedores en su clúster de cientos de servidores, si algunos contenedores deben colocarse solo en ciertos hosts porque satisfacen un criterio particular o tal vez deberían estar más cerca (o no) de otros contenedores que de alguna manera están relacionados ... todos estos son parte del componente de programación que realiza Docker Swarm.
Le sugiero que consulte la documentación de introducción en docker.com aquí: https://docs.docker.com/engine/getstarted-voting-app/
fuente