在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 -dweb_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 

因此,要生成新的链接,需要停止,删除并重新运行容器。