De acuerdo con la documentación del archivo de composición de Docker Compose :
depends_on
- Expresar dependencia entre servicios.links
- Enlace a contenedores en otro servicio y también expresa dependencia entre servicios de la misma manera que dependen_on .
No entiendo el propósito de vincular a otros contenedores, por lo que la diferencia entre dos opciones todavía me parece bastante difícil.
Sería mucho más fácil si hubiera un ejemplo, pero no puedo encontrar ninguno.
Me di cuenta, cuando vinculo el contenedor B con el contenedor A, entonces el contenedor B será "pingable" dentro del caparazón del contenedor A.
Corrí ping B
dentro del contenedor A bash
y obtuve un resultado como este (solo como referencia, imagen de Internet)
docker
docker-compose
dockerfile
itsjef
fuente
fuente
--link
indicador ahora es una característica heredada en desuso de Docker y la documentación sugiere " Docker eventualmente se eliminará" Docker: enlaces de contenedores heredados . Se sugiere no utilizar la función de redes de Docker o el método de composición de Docker . Pensé que esto sería útil para cualquiera que esté aquí aprendiendo sobre esta característica.Respuestas:
La publicación necesita una actualización después de que la
links
opción está en desuso.Básicamente,
links
ya no es necesario porque su propósito principal, hacer que el contenedor sea accesible por otro agregando variable de entorno, se incluye implícitamente connetwork
. Cuando los contenedores se colocan en la misma red, son accesibles entre sí utilizando su nombre de contenedor y otro alias como host.For
docker run
,--link
también está en desuso y debe ser reemplazado por una red personalizada.depends_on
expresa el orden de inicio (e implícitamente el orden de extracción de imágenes), que fue un buen efecto secundario delinks
.fuente
Esta respuesta es para docker-compose versión 2 y también funciona en la versión 3
Todavía puede acceder a los datos cuando utiliza depede_on.
Si observa los documentos de Docker Docker Compose y Django , aún puede acceder a la base de datos de esta manera:
¿Cuál es la diferencia entre links y dependen_on?
Enlaces:
Cuando crea un contenedor para una base de datos, por ejemplo:
Y puedes encontrar
Esto significa que puede conectar la base de datos desde su puerto localhost 32777 (3306 en el contenedor) pero este puerto cambiará cada vez que reinicie o elimine el contenedor. Por lo tanto, puede usar enlaces para asegurarse de que siempre se conectará a la base de datos y no tiene que saber qué puerto es.
depende de:
Encontré un buen blog de Giorgio Ferraris Docker-compose.yml: de V1 a V2
Y
Actualizar
depende de
Expresar dependencia entre servicios, que tiene dos efectos:
docker-compose up
iniciará los servicios en orden de dependencia. En el siguiente ejemplo, db y redis se iniciarán antes que la web.docker-compose up SERVICE
incluirá automáticamente las dependencias de SERVICIO. En el siguiente ejemplo, docker-compose up web también creará e iniciará db y redis.Ejemplo simple:
fuente
https://docs.docker.com/compose/compose-file/compose-versioning/
docker run
aquí es completamente irrelevante, de todos modos no es así como se ejecutará el contenedor. ¿Qué me estoy perdiendo?docker run
ejemplo quiero señalar por qué necesitamos usar depende_on o enlaces en lugar de codificar un número de puerto. Solo porque si no lo especifica, cambiará cada vez. Creo que esto permitirá que la gente entienda más sobre depende_on o enlaces.[Actualización de septiembre de 2016]: esta respuesta estaba destinada a docker compose file v1 (como se muestra en el archivo de compilación de muestra a continuación). Para v2, vea la otra respuesta de @Windsooon.
[Respuesta original]:
Está bastante claro en la documentación.
depends_on
decide la dependencia y el orden de creación del contenedor ylinks
no solo lo hace, sino tambiénPor ejemplo, suponiendo el siguiente
docker-compose.yml
archivo:Con
links
, el código internoweb
podrá acceder a la base de datos utilizandodb:5432
, suponiendo que el puerto 5432 esté expuesto en ladb
imagen. Sidepends_on
se usaran, esto no sería posible, pero el orden de inicio de los contenedores sería correcto.fuente
links
odepends_on
o ninguno de los dos está bien? Misdocker-compose.yml
usos actualesdepends_on
y las cosas parecen funcionar bien. :)name:port
entoncesdepends_on
está bien.db
en elweb
nombre de host de las bases de datos.