¿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?
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.
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