¿Cómo funcionan juntos los enlaces y el escalado en docker compose?


Aquí está mi comprensión de docker compose:

  • Puede "escalar" un servicio para ejecutarlo en varios contenedores a la vez.
  • Si vincula el servicio A al servicio B, el servicio A tiene acceso a un contenedor que ejecuta el servicio B.

¿Entiendo bien, y si es así, dónde se conecta un enlace si hay varios contenedores que ejecutan el servicio?

Author: Gaelan, 2015-04-19

1 answers

En primer lugar me gustaría aclarar que, por defecto, con o sin vincular un contenedor con otro, todo contenedor tiene visibilidad a otros contenedores que se ejecutan en el mismo host (utilizando la IP del contenedor). Puede cambiar este comportamiento usando el indicador icc=true en el demonio docker.

Con respecto a los enlaces con docker-compose, estos se generan cuando se crea el contenedor con los enlaces. Veamos un ejemplo. Usando esta docker-compose.yml

web:
  build: .
  command: python app.py
  ports:
   - "5000:5000"
  volumes:
   - .:/code
  links:
   - redis
redis:
  image: redis

Después de ejecutar docker-compose up -d el contenedor web_1 está vinculado con el contenedor con redis_1:

        (...)
        "Links": [
        "/compose_redis_1:/compose_web_1/compose_redis_1",
        "/compose_redis_1:/compose_web_1/redis",
        "/compose_redis_1:/compose_web_1/redis_1"
    ], (...)

Ahora queremos escalar el servicio redis usando docker-compose scale redis=2. Después de ejecutarlo (y crear un nuevo contenedor redis_2), los enlaces en web_1 se mantienen sin cambios.

        (...)
        "Links": [
        "/compose_redis_1:/compose_web_1/compose_redis_1",
        "/compose_redis_1:/compose_web_1/redis",
        "/compose_redis_1:/compose_web_1/redis_1"
    ], (...)

Es necesario detener, eliminar y ejecutar web_1 para ver estos enlaces creados:

docker-compose stop web
docker-compose rm web
docker-compose run -d web
docker inspect compose_web_run_2
(...)        "Links": [
        "/compose_redis_1:/compose_web_run_2/compose_redis_1",
        "/compose_redis_2:/compose_web_run_2/compose_redis_2",
        "/compose_redis_1:/compose_web_run_2/redis",
        "/compose_redis_1:/compose_web_run_2/redis_1",
        "/compose_redis_2:/compose_web_run_2/redis_2"
    ],(...)

Y el /etc/hosts de web_1 contenedor:

172.17.0.24 7be2dabea910
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.21 compose_redis_1 8a1297a5b3e4
172.17.0.23 compose_redis_2 069dd46836aa
172.17.0.21 redis 8a1297a5b3e4 compose_redis_1
172.17.0.21 redis_1 8a1297a5b3e4 compose_redis_1
172.17.0.23 redis_2 069dd46836aa compose_redis_2

Por lo tanto, para generar los nuevos enlaces, es necesario detener, eliminar y ejecutar de nuevo el contenedor.

 30
Author: Javier Cortejoso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-19 21:03:37