Docker网络

1、docker0

  当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理 解为一个软件交换机。它会在挂载到它的网口之间进行转发。
  当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外 一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0 ;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI2QT )。通过这种方式,主机可以跟容器通信,容器 之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。

  

  

  原理:

  1.  我们每启动一个docker容器,docker就会给容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0。
  2. 桥接模式,使用的技术是veth-pair技术。
  3. 这个容器带来的网卡都是一一对应的。
  4. veth-pair就是一对的虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连。
  5. 正因为有这个特性,veth-pair充当一个桥梁,连接各种虚拟网络设备的。

2、使用link方式连接容器

  通过link方式,可以将两个容器相互连接。

  使用busybox进行测试,可以直接docker pull busybox拉取镜像

# 启动一个名字为busy1的容器
docker run -itd --name busy1 busybox
# 启动一个名字为busy2的容器并且连接busy1
docker run -itd --name busy2 --link busy1 busybox
# 进入busy2 
docker exec -it busy2 sh 
# ping busy1
ping busy1

  

   经过测试可以ping通,说明busy2容器已经和busy1相连。

  原理:link方式实际上就是在容器的hosts配置中增加一个映射。

# 进入busy2容器
docker exec -it busy2 sh
# 查看hosts
cat /etc/hosts

  

   如图可以看见,在busy2容器中的hosts,自动配置上了busy1的映射,包括名字和容器id,同理,通过容器id也可以ping通。

3、使用网络连通

   3.1、docker安装后会自动生成三个网络,通过 docker network ls 可以查看

# 查看docker网络
docker network ls

  

  • bridge:桥接模式(默认)
  • host:和宿主机共享网络
  • none:不配置网络

  3.2、创建容器并加入网络

# 创建busy1 并加入bridge
docker run -itd --name busy1 --net bridge busybox
# 创建busy2 并加入bridge
docker run -itd --name busy2 --net bridge busybox
# 进入busy1 ping busy2 经过测试,只能用容器的内网ip ping,用容器id和容器名称均ping不通
docker exec -it busy1 sh
ping 172.17.0.3
# 进入busy2 ping busy1 经过测试,只能用容器的内网ip ping,用容器id和容器名称均ping不通
docker exec -it busy2
ping 172.17.0.2

   3.3、自己创建一个网络并运行容器后加入

# 创建自定义网络,默认类型是bridge桥接网络
docker network create mynet
# 创建busy1 并加入mynet
docker run -itd --name busy1 --net mynet busybox
# 创建busy2 并加入mynet
docker run -itd --name busy2 --net mynet busybox
# 进入busy1 ping busy2 经过测试,自己创建的网络,可以使用容器名称,容器id和容器内网ip ping通
docker exec -it busy1 sh
ping busy2
# 进入busy2 ping busy1 经过测试,自己创建的网络,可以使用容器名称,容器id和容器内网ip ping通
docker exec -it busy2
ping busy1

     经过测试:自己创建的网络,可以使用容器名称,容器id和容器内网ip ping通。

  3.4、加入网络

# busy3容器加入mynet网络
docker network connect mynet busy3

  3.5、查看docker网络信息

# 查看docker网络信息列表
docker network ls
# 查看docker网络信息详情
docker network inspect 0ba825577fe7

    运行并加入该网络的容器,会在这个网络配置里面看到,如下图

 

posted @ 2023-01-04 14:04  关心千九  阅读(63)  评论(0编辑  收藏  举报