7.2 容器互联

容器的互联(linking)是一种让多个容器中的应用进行快速交互的方式。它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址

使用--link参数可以让容器之间安全地进行交互,--link参数的格式为--link name:alias,其中name是要链接的容器的名称,alias是别名。

1. 建立互联

$ docker run -d --name service tomcat:latest
ee9d17f71015fe87ee9e0c0202f3e00344839c4102df4b8e24001a36b760e050

$ docker run -d --name app --link service:service tomcat:latest
34c796d55c8923af377640f0d4cfe9abb69598fc6aba0965c26baf2e9f668ab3

执行完上述命令后,app容器会链接到service容器。此时,app容器将被允许访问service容器的信息。

2. 验证

Docker通过两种方式为容器公开连接信息:

  • 更新环境变量

  • 更新/etc/hosts文件。

检查环境变量

$ docker exec app env | grep SERVICE
SERVICE_PORT=tcp://172.17.0.2:8080
SERVICE_PORT_8080_TCP=tcp://172.17.0.2:8080
SERVICE_PORT_8080_TCP_ADDR=172.17.0.2
SERVICE_PORT_8080_TCP_PORT=8080
SERVICE_PORT_8080_TCP_PROTO=tcp
SERVICE_NAME=/app/service
SERVICE_ENV_JAVA_HOME=/usr/local/openjdk-11
SERVICE_ENV_LANG=C.UTF-8
SERVICE_ENV_JAVA_VERSION=11.0.13
SERVICE_ENV_CATALINA_HOME=/usr/local/tomcat
SERVICE_ENV_TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib
SERVICE_ENV_LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib
SERVICE_ENV_GPG_KEYS=A9C5DF4D22E99998D9875A5110C01C5A2F6059E7
SERVICE_ENV_TOMCAT_MAJOR=10
SERVICE_ENV_TOMCAT_VERSION=10.0.14
SERVICE_ENV_TOMCAT_SHA512=c2d2ad5ed17f7284e3aac5415774a8ef35434f14dbd9a87bc7230d8bfdbe9aa1258b97a59fa5c4030e4c973e4d93d29d20e40b6254347dbb66fae269ff4a61a5

使用env命令来查看app容器的环境变量,其中SERVICE_开头的环境变量是供app容器连接service容器使用,前缀采用大写的连接别名

检查/etc/hosts文件内容

除了环境变量,Docker还添加host信息到父容器的/etc/hosts文件中:

$ docker exec app grep service /etc/hosts
172.17.0.2	service ee9d17f71015

使用PING命令验证容器的连通性

首先,在app容器中安装ping命令工具:

$ docker exec app apt-get update
$ docker exec app apt-get install -y inetutils-ping

然后,在app容器中执行ping命令:

$ docker exec app ping -c 3 service
PING service (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: icmp_seq=0 ttl=64 time=0.110 ms
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.099 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.159 ms
--- service ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.099/0.123/0.159/0.026 ms

Last updated