Docker网络

世上唯一不能复制的是时间,唯一不能重演的是人生,唯一不劳而获的是年龄。该怎么走,过什么样的生活,全凭自己的选择和努力。人生很贵,请别浪费!与智者为伍,与良善者同行。Docker网络,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1、docker0

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

  Docker网络

  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

  Docker网络

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

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

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

  Docker网络

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

3、使用网络连通

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

# 查看docker网络
docker network ls

  Docker网络

  • 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

Docker网络

   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

Docker网络

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

  3.4、加入网络

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

  3.5、查看docker网络信息

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

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

Docker网络

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/238775.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!