在docker工作中,链接和缩放如何协同工作?
以下是我对Docker撰写的理解:
- 您可以“缩放”服务,以便一次在多个容器中运行它。
- 如果将服务A链接到服务B,则服务A可以访问运行服务B的容器。
我的理解是否正确,如果有的话,如果有多个容器运行服务,那么链接在哪里连接?
首先,我会澄清,默认情况下,无论是否与其他容器链接,所有容器都可以看到在同一主机上运行的其他容器(使用容器IP)。 您可以使用docker守护进程中的icc=true
标志更改此行为。
关于docker-compose的链接,当带有链接的容器被创build时会生成这些链接。 我们来看一个例子。 使用这个docker-compose.yml
web: build: . command: python app.py ports: - "5000:5000" volumes: - .:/code links: - redis redis: image: redis
运行web_1
docker-compose up -d
, web_1
容器与web_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" ], (...)
现在我们要使用docker-compose scale redis=2
来扩展redis
服务。 运行后(并创build一个新的容器redis_2
), redis_2
的链接保持不变。
(...) "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" ], (...)
需要停止,移除并运行web_1
以查看这些创build的链接:
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" ],(...)
和web_1
容器的/etc/hosts
:
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
因此,要生成新的链接,需要停止,删除并重新运行容器。