1.默认的传统网桥通信方式
docker的通信使用的是传统的linux网桥,他会在主机上虚机出来一个名为docker0的接口,执行docker0:

2.docker0网桥连接方式

网络配置过程如下:
a. 在宿主机上创建一对虚拟网卡veth pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。
b. 在容器启动时,Docker引擎将veth pair设备的一端放在新创建的容器中,并命名为eth0。另一端放在宿主机中,以veth***这样类似的名字命名,并将这个网络设备加入到docker0网桥中,可以通过brctl show命令查看。
c. docker启动一个容器时会根据docker0的网段划分容器的IP,docker0是每个container的网关,容器的ip都将会是172.17网段。

3.自定义虚拟网桥

// 新增网桥br0
# brctl addbr br0
# ifconfig br0 172.17.0.0/24 up
// 修改docker启动配置文件(centos下,docker启动配置文件路径是/etc/sysconfig/docker),添加DOCKER_OPTS值,使docker启用新添加的网桥br0
# vim /etc/sysconfig/docker
DOCKER_OPTS="-b=br0"
// 修改docker守护进程配置文件,添加EnvironmentFile绝对路径与启动项$DOCKER_OPTS,其中“ - ”代表ignore error
# vim /usr/lib/systemd/system/docker.service
EnvironmentFile=-/etc/sysconfig/docker
ExecStart=/usr/bin/dockerd $DOCKER_OPTS
// 重启所有守护进程。重新装载所有守护进程的unit文件,然后重新生成依赖关系树
# systemctl  daemon-reload
# service docker restart
// 查看容器IP,验证其更改为br0网段
# docker run -it --name test2 centos /bin/bash
cID# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.2  netmask 255.255.0.0  broadcast 0.0.0.0inet6 fe80::42:acff:fe11:2  prefixlen 64  scopeid 0x20<link>ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)RX packets 1188  bytes 7830677 (7.4 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 1073  bytes 73229 (71.5 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

4.使用ovs网桥(通过ovs-docker命令配置)

1)创建ovs网桥,并设置ip为192.168.1.250/24,并在后续容器网络中作为其默认网关

[root@vm1 ~]# ovs-vsctl add-br br0 [root@vm1 ~]# ovs-vsctl showBridge br0Port br0Interface br0type: internal[root@vm1 ~]# ifconfig br0 192.168.1.250/24 [root@vm1 ~]# ifconfig br0
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.1.250  netmask 255.255.255.0  broadcast 192.168.1.255inet6 fe80::c0b6:92ff:fe4d:7649  prefixlen 64  scopeid 0x20<link>ether c2:b6:92:4d:76:49  txqueuelen 1000  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 8  overruns 0  frame 0TX packets 6  bytes 508 (508.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2)启动无网络docker

[root@vm1 ~]# docker run -d --name con1 --net=none busybox top[root@vm1 ~]# docker exec -it con1 ifconfiglo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0UP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

3)此时利用ovs-docker 设置此容器ip地址为192.168.1.2/24,需要保证与ovs网桥同一个网段,并且设置ovs网桥地址为容器默认网关为192.168.1.250

[root@vm1 ~]# ovs-docker add-port br0 eth0 con1 --ipaddress=192.168.1.2/24 --gateway=192.168.1.250[root@vm1 ~]# docker exec -it con1 ifconfig
e
eth0      Link encap:Ethernet  HWaddr 56:39:36:6A:B0:61inet addr:192.168.1.2  Bcast:0.0.0.0  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:7 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:578 (578.0 B)  TX bytes:0 (0.0 B)lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0UP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)[root@vm1 ~]# docker exec -it con1 route -n
K
Kernel IP routing table
D
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface0.0.0.0         192.168.1.250   0.0.0.0         UG    0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0[root@vm1 ~]# ovs-vsctl showc152c245-2f6c-478c-9c07-2e4a3c7a2403Bridge br0Port veth0Interface veth0Port 7506959a37594_lInterface 7506959a37594_lPort br0Interface br0type: internal

5.ovs-docker的原理(其实容器的网络就相当于一个ns)

1)同上步骤1)创建ovs网桥br0
2)创建一个network namespace ns1

[root@vm1 ~]# ip netns add ns1创建一对veth pair (veth0 和 veth1)[root@vm1 ~]# ip link add veth0 type veth peer name veth1
// 将veth0加入到br0中[root@vm1 ~]# ip link set veth0 up[root@vm1 ~]# ovs-vsctl add-port br0 veth0[root@vm1 ~]# ovs-vsctl show
c152c245-2f6c-478c-9c07-2e4a3c7a2403Bridge "br0"Port "veth0"Interface "veth0"Port "br0"Interface "br0"type: internalovs_version: "2.5.1"[root@vm1 ~]#
// 将veth1加入到ns1中[root@vm1 ~]# ip link set veth1 netns ns1
// 设置veth1 ip 与br0是同一个网络[root@vm1 ~]# ip netns exec ns1 ip addr add 192.168.1.1/24 dev veth1[root@vm1 ~]# ip netns exec ns1 ip link set veth1 up[root@vm1 ~]# ip netns exec ns1 ip link set lo up
// 在ns1中ping br0成功[root@vm1 ~]# ip netns exec ns1 ping -c 1 192.168.1.250
PING 192.168.1.250 (192.168.1.250) 56(84) bytes of data.64 bytes from 192.168.1.250: icmp_seq=1 ttl=64 time=0.392 ms--- 192.168.1.250 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0ms
r
rtt min/avg/max/mdev = 0.392/0.392/0.392/0.000 ms

3)给ns1增加路由

[root@vm1 ~]# ip netns exec ns1 route add default gw 192.168.1.250
[
[root@vm1 ~]# ip netns exec ns1 ping -c 1 172.19.0.12
P
PING 172.19.0.12 (172.19.0.12) 56(84) bytes of data.64 bytes from 172.19.0.12: icmp_seq=1 ttl=64 time=0.224 ms--- 172.19.0.12 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.224/0.224/0.224/0.000 ms

docker网络配置详解相关推荐

  1. 七、Docker网络模式详解

    目录 一.docker网络概述 1.docker网络实现的原理 2.容器的端口映射 1).端口映射 2).四种端口映射 3).端口映射演示 (1).随机端口映射(-P) (2).指定端口映射(-p 宿 ...

  2. Docker网络模式详解

    文章目录 一.docker网络概述 1.docker网络实现的原理 二. docker的网络模式 1.默认网络 2.使用docker run 创建Docker容器时,可以用--net或--networ ...

  3. [转载]VirtualBox网络配置详解

    标题: [原创]VirtualBox网络配置详解 来自 http://www.linuxsir.org/bbs/showthread.php?p=1800679#post1800679 欢迎转载, 转 ...

  4. 中标麒麟网络配置详解

    配置文件所在目录 cd /etc/sysconfig/network-scripts/ 配置文件详解: 对应字段如何查询均在详细解释中说明 DHCP(自动获取) TYPE="Ethernet ...

  5. Docker6种网络配置详解,网络模式应该这么选

    文章目录 一.Bridge网络模式 二.Host网络模式 三.Overlay网络模式 四.None网络模式 五.Macvlan网络模式 六.Ipvlan网络模式 七.网络模式选择 在Docker中,网 ...

  6. 【云原生 | Docker 高级篇】06、Docker 网络模式详解

    目录 一.Docker 平台架构图解 ​整体说明: 二.Docker 网络是什么 三.Docker 网络常用基本命令 1.查看网络 2.查看网络源数据 3.删除网络 4.案例 ​四.Docker 能干 ...

  7. VMware网络配置详解

    VMware常用虚拟机的常用的Host-only.Bridge.NAT三种网络连接方式,以下是个人使用的部分经验分享. 一 VMware网络设置的三种方式 1 Host-only连接方式 (1)原理: ...

  8. Linux系统中网络配置详解

    从linux诞生的那一天起,就注定了它的网络功能空前地强大.所以在linux系统中如何配置网络,使其高效,安全的工作就显得十分重要.下面我们就从网络设备的安装,网络服务的设置和网络安全性三个方面来介绍 ...

  9. Linux系统中网络配置详解(一)

       从linux诞生的那一天起,就注定了它的网络功能空前地强大.所以在linux系统中如何配置网络,使其高效,安全的工作就显得十分重要.下面我们就从网络设备的安装,网络服务的设置和网络安全性三个方面 ...

  10. 【Linux】Linux网络配置详解

    网络配置 一.网络连接测试 1.查看宿主机和虚拟机ip (1)查看宿主机ip ①宿主机:可视化界面查看ip ②宿主机:命令行查看ip (2)查看虚拟机ip ①虚拟机:可视化界面查看ip ②虚拟机:命令 ...

最新文章

  1. 适配iOS 13 tabbar 标题字体不显示以及返回变蓝色的为问题
  2. Makefile:自动化变量 $@,$^,$<,$?
  3. java面试必背知识点
  4. Java容器的遍历之增强for循环
  5. 使用Laravel Eloquent ORM 时如何查询表中指定的字段 1
  6. php 生成随机数组,利用php如何获取随机数组列表
  7. java 字符串查找程序,查找字符串的所有子集的Java程序
  8. 计算机组成原理第三章ppt,计算机组成原理第三章幻灯片(白中英版).ppt
  9. 图像分割-阈值分割法
  10. Android逆向之路---让我们试试另一种方法看漫画-(1)
  11. python柱状图加百分比_python matplotlib 为柱状图添加百分比
  12. Linux内核子系统---内存管理子系统、进程管理子系统
  13. android健身app毕设,几款健身类App的分析报告
  14. select 函数使用方法
  15. webview加载网页,tel协议不会调出拨号盘?该如何处理
  16. 图(Graph)-图的存储
  17. 驴商人和胡萝卜的算法逻辑思维问题
  18. 微商怎么用百度引流?早知三日,富贵一生
  19. 常用数据库 知识点大全 (Mysql,Redis,MongoDB)
  20. 1+X Web前端等级考证 | Web前端开发中级12月最新模拟题 (5套包含理论实操答案)

热门文章

  1. 以太坊Merkle Patricia Tree(MPT)技术深度解读
  2. [转][python] 常用正则表达式爬取网页信息及分析HTML标签总结
  3. STM32串口通信(使用C8T6)
  4. iPhone开发之修改UINavigation Bar背景图片
  5. (结构型模式)FlyWeight——享元模式
  6. api postmain 鉴权_API网关为什么要统一认证/鉴权?
  7. Spring Cloud构建微服务架构(四)分布式配置中心(续)
  8. 每秒处理10万高并发订单的乐视集团支付系统架构分享
  9. 程序开发——结对编程
  10. silverlight3.0 怎么调试XAML对应的XAML.CS文件