yml start network hub example create compose docker docker-compose dockerfile

start - Diferencia entre enlaces y dependen_on en docker_compose.yml



docker-compose start (3)

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 depends_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.

Ejecuté ping B dentro del bash del contenedor A y obtuve un resultado como este (solo como referencia, imagen de Internet)


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:

version: ''2'' services: db: image: postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db

¿Cuál es la diferencia entre links y dependen_on?

campo de golf:

Cuando crea un contenedor para una base de datos, por ejemplo:

docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql docker inspect d54cf8a0fb98 |grep HostPort

Y puedes encontrar

"HostPort": "32777"

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.

web: links: - db

depende de:

Encontré un buen blog de Giorgio Ferraris Docker-compose.yml: de V1 a V2

Cuando docker-compose ejecuta archivos V2, construirá automáticamente una red entre todos los contenedores definidos en el archivo, y cada contenedor podrá referirse inmediatamente a los demás simplemente usando los nombres definidos en el archivo docker-compose.yml.

Y

Entonces ya no necesitamos enlaces; los enlaces se usaron para iniciar una comunicación de red entre nuestro contenedor de db y nuestro contenedor de servidor web, pero esto ya lo hace docker-compose

Actualizar

depends_on

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.
  • El servicio docker-compose up incluirá automáticamente las dependencias de SERVICE. En el siguiente ejemplo, docker-compose up web también creará e iniciará db y redis.

Ejemplo simple:

version: ''2'' services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres

Nota: depende_on no esperará a que db y redis estén "listos" antes de iniciar la web, solo hasta que se hayan iniciado. Si necesita esperar a que un servicio esté listo, consulte Control del orden de inicio para obtener más información sobre este problema y las estrategias para resolverlo.


La publicación necesita una actualización después de que la opción de links está en desuso.

Básicamente, los links ya no son necesarios porque su propósito principal, hacer que el contenedor sea accesible por otro mediante la adición de una variable de entorno, se incluye implícitamente con la network . Cuando los contenedores se colocan en la misma red, son accesibles entre sí utilizando su nombre de contenedor y otro alias como host.

Para la docker run --link , --link también está en desuso y debe reemplazarse por una red personalizada.

docker network create mynet docker run -d --net mynet --name container1 my_image docker run -it --net mynet --name container1 another_image

depends_on expresa el orden de inicio (e implícitamente el orden de extracción de la imagen), que fue un buen efecto secundario de los links .


[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 y los docs.docker.com/compose/compose-file/#links no solo hacen esto, sino que también

Se podrá acceder a los contenedores para el servicio vinculado con un nombre de host idéntico al alias o el nombre del servicio si no se especificó ningún alias.

Por ejemplo, suponiendo el siguiente archivo docker-compose.yml :

web: image: example/my_web_app:latest links: - db - cache db: image: postgres:latest cache: image: redis:latest

Con links , el código dentro de la web podrá acceder a la base de datos usando db:5432 , suponiendo que el puerto 5432 esté expuesto en la imagen db . Si se utiliza depends_on , esto no sería posible, pero el orden de inicio de los contenedores sería correcto.