linux cpu占用率如何看
320
2022-10-25
5分钟玩转 Docker Bridge
Docker容器的Bridge模式也是Docker默认的网络模式。
该模式会为每个容器分配Network Namespace子系统,会自动给每个容器虚拟出自己的网卡、IP、网关、路由等信息,无需手工添加。
默认创建的Docker容器会统一通过一对veth虚拟网卡,连接到一个虚拟网桥交换机Docker0上,所有的容器的网络加入到一个二层交换机网络里面,即同一宿主机的所有容器之间都是可以相互联通和访问的。
Bridge模式原理剖析
默认Docker引擎启动会在本地生成一个Docker0虚拟网卡。Docker0是一个标准Linux虚拟网桥设备。在Docker默认的桥接网络工作模式中,Docker0网桥起到了至关重要的作用。
物理网桥是标准的二层网络设备,标准物理网桥只有两个网口,可以将两个物理网络连接在一起。但与物理层设备集线器等相比,网桥具备隔离冲突域的功能。网桥通过MAC地址学习和泛洪的方式实现二层相对高效的通信。
随着技术的发展,标准网桥设备已经基本被淘汰了,替代网桥的是二层交换机。二层交换机也可以看成一个多口网桥。
Docker Bridge桥接模式创建过程
①启动一个Docker容器,指定模式为桥接模式时,Docker引擎会创建一对虚拟网卡veth pair设备。
②Docker将veth pair设备的一块设备放在新创建的容器中,命名为eth0,然后将另外一块设备放在宿主机中,以vethxxx类似的名称命名,并将这个网络设备加入到docker0网桥中。
③Docker引擎会从docker0子网中动态分配一个新的IP给容器使用,并设置docker0的IP地址为容器的默认网关。
④此时新创建的容器与宿主机能够通信,宿主机也可以访问容器中的IP地址,在Bridge模式下,连在同一网桥(交换机)上的容器之间可以相互通信,同时容器也可以访问外网(基于iptables SNAT),但是其他物理机不能访问docker容器IP,需要通过NAT将容器IP的port映射为宿主机的IP和port。
Bridge模式实战(一)
基于Docker引擎启动Nginx WEB容器,默认以Bridge方式启动Docker容器,会动态DHCP给Docker容器分配IP、网关等信息,操作指令如下:
#查看镜像列表;
docker images
#运行新的Nginx容器;
docker run -itd docker.io/nginx:latest
#查看启动的nginx容器
docker ps
#查看nginx容器的IP地址;
docker inspect 510ea29c39f6|grep -i ipaddr
访问nginx容器80端口服务;
curl -I WEB容器,默认以Bridge方式启动Docker容器,此处使用pipework工具手工给容器指定桥接网卡,并且手工配置IP地址,操作指令如下:
#查看镜像列表;
docker images
#运行新的Nginx容器;
docker run -itd --net=none docker.io/nginx:latest
#查看启动的nginx容器
docker ps
#查看nginx容器的IP地址;(没有IP地址)
docker inspect 265a3745752e|grep -i ipaddr
安装pipework IP配置脚本工具,方法如下:
#安装pipework
git clone ~/pipework/pipework /usr/local/bin/
#查看pipework工具是否配置正确;
pipework -h
基于pipework工具手工指定容器的IP,并且设置容器为桥接方式上网,命令如下:
#docker0为网桥名称,172.17.0.18/16为容器IP和掩码,172.17.0.1为容器网关
pipework docker0 265a3745752e 172.17.0.18/16@172.17.0.1
ping 172.17.0.18 -c 2
curl -I WEB容器,默认以Bridge方式启动Docker容器,而且Docker0的网桥IP为172.17.0.0/16网段,可以通过指令修改Docker网桥的IP网段,例如将网桥IP段修改为10.10.0.1/16段,操作指令如下:
#删除原有网络信息;
service docker stop
ip link set dev docker0 down
brctl delbr docker0
iptables -t nat -F POSTROUTING
#添加新的docker0网络信息;
brctl addbr docker0
ip addr add 10.10.0.1/16 dev docker0
ip link set dev docker0 up
#配置Docker的文件;
cat>/etc/docker/daemon.json< {"registry-mirrors": [""10.10.0.1/16" } EOF #启动新的Docker容器,查看容器桥接网络IP地址,如图所示: docker run -itd docker.io/nginx:latest docker inspect 72fec5ccdf73|grep -i ipaddr Bridge模式实战(四) 基于Docker引擎启动Nginx WEB容器,默认以Bridge方式启动Docker容器,而且Docker0的网桥IP为172.17.0.0/16网段,默认局域网的其他物理机是不能直接访问Docker容器的。 为了实现Docker容器跟局域网通信,并且实现局域网其他的物理机也可以访问容器的IP(不配置NAT映射),可以自定义桥接网络br0,将br0跟物理网卡eth0或者ens33桥接。 操作方法如下: #添加ens33网卡指定bridge桥接网卡名称br0; cd /etc/sysconfig/network-scripts/ #查看ifcfg-ens33网卡IP地址; cat ifcfg-ens33 TYPE="Ethernet" DEVICE="ens33" ONBOOT="yes" BRIDGE="br0" IPADDR=192.168.0.141 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 #查看ifcfg-br0网卡IP地址; cat ifcfg-br0 DEVICE="br0" BOOTPROTO=static ONBOOT=yes TYPE="Bridge" IPADDR=192.168.0.141 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 #重启network网络服务; service network restart #修改docker引擎,使其读取br0网桥; cat /etc/sysconfig/docker-network DOCKER_NETWORK_OPTIONS="-b=br0" #启动Docker容器,设置为none模式,然后使用br0网桥,指令如下: #br0为网桥名称,192.168.0.11/24为容器IP和掩码,192.168.0.141为容器网关 docker run -itd --net=none --name=nginx-v1 docker.io/nginx pipework br0 nginx-v1 192.168.0.11/24@192.168.0.141
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~