Docker中容器之间的通信

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|容器名称
    

你可能感兴趣的:(docker,容器,运维)