容器网络(一)docker容器网络驱动

摘要:
#Dockerrun-it--network=nonebusybox/#ifconfigloLinkencap:LocalLoopbackinetaddr:127.00.1掩码:255.0.0.0UPLOOPBACKRUNNINGMTU:65536度量:1RXpackets:0错误:0丢弃:0覆盖:0帧:0TXpackets:0errors:0丢弃:0overwrites:0载波:0集合:0txqueuelen:1000RXbytes:02。主机网络驱动共享主机的网络堆栈,该堆栈具有最佳性能,但由于共享主机的网络堆栈,它也共享主机的端口资源。在作者的在线环境中,为了提高网络性能,我们使用主机模式部署zabbixserver监控。

一、Linux网桥和veth pair

1、Linux网桥,虚拟的交换机,工作在数据链路层,通过学习到MAC地址,将数据包转发到网桥的不同端口上。

2、Veth pair,可以理解为一根虚拟的网线,创建veth pair后,会以两张虚拟网卡的形式成对出现,在其中一个网卡发出的数据包,会直接出现在与它对应的另一张网卡上。

二、三种docker网络驱动

Docker默认会创建三种网络,分别为:none、host和bridge,可以通过命令docker network ls查看

# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
948cb107a456       bridge              bridge              local
59932afae000        host                host                local
d16315c941e2        none                null                local

1、none网络驱动

none,就是什么都没有,在创建容器时,指定参数—network=none,使用ifconfig命令查看,可以看到只有lo的回环网卡。

# docker run -it --network=none busybox

/ # ifconfig 

lo        Link encap:Local Loopback  

          inet addr:127.0.0.1  Mask:255.0.0.0

          UP LOOPBACK RUNNING  MTU:65536  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

2、host网络驱动

共享宿主机的网络栈,性能最佳,但是由于共享宿主机的网络栈,也共享了宿主机的网络端口资源。

在笔者的线上环境,为了网络性能,我们使用的就是host模式来部署zabbix server监控。

# docker run -it --network=host busybox

/ # ifconfig 

docker0   Link encap:Ethernet  HWaddr 02:42:44:C8:BF:47  

          inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0

          UP BROADCAST MULTICAST  MTU:1500  Metric:1

          RX packets:100 errors:0 dropped:0 overruns:0 frame:0

          TX packets:100 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0 

          RX bytes:7702 (7.5 KiB)  TX bytes:11897 (11.6 KiB)

 

eth0      Link encap:Ethernet  HWaddr FA:16:3E:38:3C:A1  

          inet addr:10.30.20.87  Bcast:10.30.20.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:1016565 errors:0 dropped:0 overruns:0 frame:0

          TX packets:169554 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:289066541 (275.6 MiB)  TX bytes:35157980 (33.5 MiB)

 

lo        Link encap:Local Loopback  

          inet addr:127.0.0.1  Mask:255.0.0.0

          UP LOOPBACK RUNNING  MTU:65536  Metric:1

          RX packets:4 errors:0 dropped:0 overruns:0 frame:0

          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:200 (200.0 B)  TX bytes:200 (200.0 B)

3、bridge网络驱动

Docker服务启动后,默认有一个名为docker0的网卡,在宿主机上可以用ifconfig查看到,分配的IP地址是172.17.0.1

# ifconfig 

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255

        ether 02:42:44:c8:bf:47  txqueuelen 0  (Ethernet)

        RX packets 100  bytes 7702 (7.5 KiB)

        RX errors 0  dropped 0 overruns 0  frame 0

        TX packets 100  bytes 11897 (11.6 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0 collisions 0

使用bridge创建容器,可以看到容器的eth0网卡分配的IP地址是172.17.0.2,网关是172.17.0.1

# docker run -it --network=bridge busybox

/ # ifconfig 

eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  

          inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0 

          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

……

/ # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0        172.17.0.1      0.0.0.0         UG   0      0       0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U    0      0        0 eth0

 在宿主机上使用brctl show查看,网桥docker0上“插入”了网卡vethc79f4a4,这个就是我们上面提到的veth pair,一端是vethc79f4a4接入网桥docker0,另一端就是容器里的eth0网卡

# brctl show

bridge name     bridge id               STP enabled     interfaces

docker0        8000.024244c8bf47       no              vethc79f4a4

# ifconfig vethc79f4a4

vethc79f4a4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        ether 3e:d7:34:58:8b:ea  txqueuelen 0  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0 overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0 collisions 0

为什么docker0分配的IP地址是172.17.0.1?

# docker network inspect bridge

……

           "Config": [

                {

                   "Subnet": "172.17.0.0/16",

                   "Gateway": "172.17.0.1"

                }

……

我们可以查看docker0分配的网段是172.17.0.0/16

最终使用网桥创建的容器的网络架构图如下

容器网络(一)docker容器网络驱动第1张

免责声明:文章转载自《容器网络(一)docker容器网络驱动》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux Cache 机制Centos7 之 MariaDB(Mysql) root密码忘记的解决办法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

docker 使用 ltp分词和pos标注

1.安装docker  sudo apt-get install docker.io 2.获取ltp的docker容器 dockerfile文件在 https://github.com/HIT-SCIR/ltp/blob/master/Dockerfile 下面。获取docker配置文件后 docker build -t ltp/ltp .   另外一种方...

docker笔记

suse环境采用二进制文件安装docker后,执行systemctl start docker提示docker.service不存在。 解决办法,/usr/lib/systemd/system目录下增加docker.service文件,内容如下: [Unit] Description=Docker Application Container Engine...

(二)docker的部署安装,配置,基础命令

一、docker 的安装部署 这里不过多介绍,下面这两个linux发型版 安装可以参考 ubuntu的 docker-ce安装 centos7的 docker-ce安装 二.docker配置文件 重要参数解释: OPTIONS 用来控制Docker Daemon进程参数 -H 表示Docker Daemon绑定的地址, -H=unix:///var/r...

如何解决Linux 系统下 ifconfig 命令无网络接口 ens33

今天我在做Redis的哨兵集群模式的时候,以前都是好的,也不知道从什么时候开始就无法连接Redis服务器了,就是运行如下命令,没有效果:redis-server redis.conf,然后在通过命令查看redis的状态,始终没有启动Redis,命令如下:ps -ef|grep redis 或者 ps -ef|grep 6379 ,查询不到Redis服务器的...

docker搭建jira

一、 说明 1.1 素材 本文采用素材如下: Docker镜像 Github链接(https://github.com/cptactionhank) 破解工具 Gitee链接(https://gitee.com/pengzhile/atlassian-agent) (https://zhile.io/2018/12/20/atlassian-license...

[转载] 使用 Docker 部署 openstf 平台

转载自简书,地址:https://www.jianshu.com/p/51ed344a7ba7 1.https://www.jianshu.com/p/10bdf33d2c64 2.https://www.jianshu.com/p/ba3e4712105f 一、背景 笔者所处业务需要搭建一个云测平台,用于集中管理一批安卓系统板卡,经过方案选择,决定使用...