Docker中容器之间的通信
一、前言
容器之间是通过网络进行相互通信的
当Docker启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是Linux的一个bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。
同时,Docker随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给 docker0 接口。比如典型的 172.17.42.1,掩码为 255.255.0.0 。此后启动的容器内的网口也会自动分配一个同一网段( 172.17.0.0/16 )的地址。
当创建一个Docker容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 ethe ;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI20T )。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker就创建了在主机和所有容器之间一个虚拟共享网络。
二、通信方式
1. IP通信
默认Docker在创建容器时将所有容器都连接到 docker0 网桥上,默认在 docker0 网桥的容器都可以使用容器内IP地址进行通信
2. 容器名通信
使用容器名进行容器通信时,必须使用自定义网桥,不能使用默认的 docker0 网桥
三、具体操作
1. 查看网络
docker network ls
docker中支持的网络类型:bridge、host、null
2. 创建自定义网桥
docker network create -d bridge(默认) 网络名称
3. 查看某一个网络细节
docker network inspect 网络名称
5. 删除网络
# 删除一个网络
docker network rm 网络名称
# 删除所有未被用到的网络
docker network prune
6. 运行多个容器在指定网络中
-
启动之前明确指定容器使用哪个网络
docker run -d --network 网络名称 ......
-
启动容器之后将容器加入到某个容器中
docker network connect 网络名称 容器ID|容器名称