Saltar al contenido

Diferencia entre enlaces y depend_on en docker_compose.yml

Haz todo lo posible por comprender el código bien previamente a utilizarlo a tu proyecto si ttienes algo que aportar puedes dejarlo en la sección de comentarios.

Solución:

Esta respuesta es para docker-compose versión 2 y también funciona en versión 3

Todavía puede acceder a los datos cuando usa depend_on.

Si observa Docker docs 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 enlaces y depende_de?

Enlaces:

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 tendrá que saber qué puerto es.

web:
  links:
   - db

depende de:

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

Cuando docker-compose ejecuta archivos V2, creará 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

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

Actualizar

depende de

Expresar dependencia entre servicios, lo 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 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 sencillo:

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

Nota: depend_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 Controlar el 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 la links la opción está en desuso.

Básicamente, links ya no es necesario porque su propósito principal, hacer que otro pueda acceder al contenedor agregando una variable de entorno, se incluye implícitamente con network. Cuando los contenedores se colocan en la misma red, los demás pueden acceder a ellos utilizando su nombre de contenedor y otro alias como host.

Para docker run, --link también está obsoleto y debe ser reemplazado 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 imágenes), que fue un buen efecto secundario de links.

[Update Sep 2016]: Esta respuesta estaba pensada para el archivo de composición de docker v1 (como se muestra en el archivo de composición de muestra a continuación). Para v2, vea la otra respuesta de @Windsooon.

[Original answer]:

Está bastante claro en la documentación. depends_on decide la dependencia y el orden de creación del contenedor y links no sólo hace esto, sino también

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

Por ejemplo, suponiendo lo siguiente docker-compose.yml expediente:

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

db:
  image: postgres:latest

cache:
  image: redis:latest

Con linkscódigo dentro web podrá acceder a la base de datos utilizando db:5432asumiendo que el puerto 5432 está expuesto en el db imagen. Si depends_on se usaran, esto no sería posible, pero el orden de inicio de los contenedores sería correcto.

Comentarios y valoraciones

Si conservas algún conflicto o capacidad de acrecentar nuestro artículo eres capaz de realizar una nota y con gusto lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *