应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

一文搞懂Docker的网络模式

  一前言
  根据上篇知识了解到,通过设置不同的网络空间来达到网络协议栈的完全隔离,对于不同空间的协议栈是完全隔离,每个网络空间都可以有自己的iptables来进行单独的转发过滤等,不同的网络空间默认无法进行网络通信的,但是通过veth可以把两个不同的网络空间打通达到通讯的目的,前一篇文章也进行了相关的说明。二Docker的网络模式2。1桥接模式
  Docker的默认使用的是linux的桥接模式,有个docker0的虚拟桥,docker每启动一个容器就给这个容器分配一个containerip,同时设置了docker0桥作为默认的网关,默认情况下容器的网络都通过veth的技术来接到docker0这个虚拟桥上来达到通讯的目的。dockerrundnamenginx02Pnginxdockerrundnamenginx03Pnginx
  启动两个nginx镜像,用dockerps看下是否存在:rootubuntulab:homemiaodockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESbd64ce2fdfd2nginxdockerentrypoint。4minutesagoUp4minutes0。0。0。0:4915480tcp,:::4915480tcpnginx03687427d720b1nginxdockerentrypoint。5minutesagoUp5minutes0。0。0。0:4915380tcp,:::4915380tcpnginx02
  我们知道veth都是成对出现的,我们来验证下,是否有两个veth,且一端应该是配置了ip的即containerip,另一端可以理解为插在虚拟网桥上的。
  由于nginx的容器默认是没有带ip命令的,需要安装下:dockerexecitnginx02binbashaptgetupdateaptgetinstalliproute2
  用命令看下容器内的网卡情况:rootubuntulab:dockerexecitnginx03ipaddr1:lo:LOOPBACK,UP,LOWERUPmtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000linkloopback00:00:00:00:00:00brd00:00:00:00:00:00inet127。0。0。18scopehostlovalidlftforeverpreferredlftforever29:eth0if30:BROADCAST,MULTICAST,UP,LOWERUPmtu1500qdiscnoqueuestateUPgroupdefaultlinkether02:42:ac:11:00:03brdff:ff:ff:ff:ff:fflinknetnsid0inet172。17。0。316brd172。17。255。255scopeglobaleth0validlftforeverpreferredlftforeverrootubuntulab:dockerexecitnginx02ipaddr1:lo:LOOPBACK,UP,LOWERUPmtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000linkloopback00:00:00:00:00:00brd00:00:00:00:00:00inet127。0。0。18scopehostlovalidlftforeverpreferredlftforever27:eth0if28:BROADCAST,MULTICAST,UP,LOWERUPmtu1500qdiscnoqueuestateUPgroupdefaultlinkether02:42:ac:11:00:02brdff:ff:ff:ff:ff:fflinknetnsid0inet172。17。0。216brd172。17。255。255scopeglobaleth0validlftforeverpreferredlftforeverrootubuntulab:
  清楚地看到配置的地址分别为:172。17。0。2和172。17。0。3注意看下网卡名都是含有符号的,这个是veth的标识,eth0是其中的一端,这个配置了上面的地址,另一端是if30和if28,这个需要到宿主机器上查看:ipaddrshow28:vethd7194eeif27:BROADCAST,MULTICAST,UP,LOWERUPmtu1500qdiscnoqueuemasterdocker0stateUPgroupdefaultlinkether66:c6:93:2e:6b:7dbrdff:ff:ff:ff:ff:fflinknetnsid0inet6fe80::64c6:93ff:fe2e:6b7d64scopelinkvalidlftforeverpreferredlftforever30:veth8236973if29:BROADCAST,MULTICAST,UP,LOWERUPmtu1500qdiscnoqueuemasterdocker0stateUPgroupdefaultlinketherbe:9d:3d:ca:38:53brdff:ff:ff:ff:ff:fflinknetnsid3inet6fe80::bc9d:3dff:feca:385364scopelinkvalidlftforeverpreferredlftforever
  看到了28序号的30序号的网卡,刚好对应容器内的27和29两个序号的网卡。
  那我们再来看下网桥情况:rootubuntulab:brctlshowbridgenamebridgeidSTPenabledinterfacesdocker08000。0242726f7fa2noveth8236973vethd7194ee
  看到了吧,网桥上插着veth的一端,画出图形如下:
  docker桥接模式
  注意到这里面和上一篇桥接模式的区别为没有看到单独的网络空间(实际上应该有,不然怎么做网络隔离那,通过下面的命令没看到):rootubuntulab:ipnetnslist
  但是两者网络是互通的,测试:rootubuntulab:dockerexecitnginx02ping172。17。0。3PING172。17。0。3(172。17。0。3):56databytes64bytesfrom172。17。0。3:icmpseq0ttl64time0。224ms64bytesfrom172。17。0。3:icmpseq1ttl64time0。108msC172。17。0。3pingstatistics2packetstransmitted,2packetsreceived,0packetlossroundtripminavgmaxstddev0。1080。1660。2240。058ms
  顺便说下,我们启动nginx的时候,通过P指定了随机端口和80端口的映射,这个是通过nat来实现的,测试如下图:rootubuntulab:iptablestnatvnL
  桥接模式缺点,虽然我们可以互通,但是不能通过容器的名称ping通,有一定局限性。3。2host模式
  host模式比较简单,如果容器以host模式启动,容器不会获得独立的Networknamespace,和宿主主机共享Networknamespace,不能配置ip,也不会虚拟出网卡。它启动的端口也会占用主机的端口,外部访问直接通过宿主机器的ip进行访问即可。rootubuntulab:homemiaodockerrundnamenginx01networkhostnginxrootubuntulab:homemiaodockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES0ebd1b751f50nginxdockerentrypoint。AboutanhouragoUp36secondsnginx01rootubuntulab:homemiaonetstatantpgrep80tcp000。0。0。0:800。0。0。0:LISTEN79104nginx:mastertcp600:::80:::LISTEN79104nginx:master
  外部访问测试:
  3。3none模式
  这个模式下没有网络,端口也不能通过p来映射出来,没办法联网,监听只能在lo上,也就是只能本机访问,容器更安全,不过也只能测试玩玩。rootubuntulab:homemiaodockerrunnamemynginxnetworknonednginx99a861a124099946d6f8802f09871b6cc9881d5c10161c084997bd4847e872a7rootubuntulab:homemiaodockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES99a861a12409nginxdockerentrypoint。3secondsagoUp2secondsmynginx三其他3。1容器名是否可以ping通
  如果我们想通过容器名ping通,那么我们就可以通过容器名做连接,即实现:rootubuntulab:homemiaodockerexecitnginx02pingnginx03ping:unknownhost
  最简单地采用link方式:rootubuntulab:homemiaodockerrundPnamenginx02linknginx03nginx安装ping工具rootubuntulab:homemiaodockerexecitnginx02root3748ab1cb1e0:aptgetinstallyiputilspingrootubuntulab:homemiaodockerexecitnginx02pingnginx03PINGnginx03(172。17。0。3)56(84)bytesofdata。64bytesfromnginx03(172。17。0。3):icmpseq1ttl64time0。106ms64bytesfromnginx03(172。17。0。3):icmpseq2ttl64time0。087msC
  ok,就这样简单地通了,那么反过来那:rootubuntulab:homemiaodockerexecitnginx03pingnginx02OCIruntimeexecfailed:execfailed:unabletostartcontainerprocess:exec:ping:executablefilenotfoundinPATH:unknown
  不行,反向不通。其实只是将nginx03的ip和host的映射,配置到了nginx02容器的etchosts里面。rootubuntulab:homemiaodockerexecitnginx02catetchosts127。0。0。1localhost::1localhostip6localhostip6loopbackfe00::0ip6localnetff00::0ip6mcastprefixff02::1ip6allnodesff02::2ip6allrouters172。17。0。3nginx03bd64ce2fdfd2172。17。0。23748ab1cb1e03。2docker的自定义网络
  我们原来使用docker0作为虚拟网桥进行容器的连接,但是有docker0有限制,比如不能通过容器名直接访问。
  确保网络环境干净rootubuntulab:homemiaodockernetworklsNETWORKIDNAMEDRIVERSCOPEd8f1fa7ccbd3bridgebridgelocal1bd98c27e839hosthostlocal84542ce461aanonenulllocal
  创建自定义网络rootubuntulab:homemiaodockernetworkcreatedriverbridgesubnet192。168。3。024gateway192。168。3。1mynetdb74fc9a41e40002755989da5d83d59cca1dfb490f6c26a9f85026617d2d25ccrootubuntulab:homemiaodockernetworklsNETWORKIDNAMEDRIVERSCOPE。。。48ee4153016fmynetbridgelocal。。。
  启动两个新的容器,网络设置成我们新建的网络:rootubuntulab:homemiaodockerrundPnamenginxnet01netmynetnginxc44262be7824f4649f96b0df83ac44460f7c49c135577ee832af2a93f0cf81e3rootubuntulab:homemiaodockerrundPnamenginxnet02netmynetnginxc488ece52f691fd228916df2046fa17efd971ad81299d46f358be6c372593095rootubuntulab:homemiaodockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESc488ece52f69nginxdockerentrypoint。3secondsagoUp3seconds0。0。0。0:4916180tcp,:::4916180tcpnginxnet02c44262be7824nginxdockerentrypoint。10secondsagoUp9seconds0。0。0。0:4916080tcp,:::4916080tcpnginxnet01
  可以看到ip是我们网络内的ip如下:rootubuntulab:homemiaodockerinspectnginxnet02grepIPAddressSecondaryIPAddresses:null,IPAddress:,IPAddress:192。168。3。3,rootubuntulab:homemiaodockerinspectnginxnet01grepIPAddressSecondaryIPAddresses:null,IPAddress:,IPAddress:192。168。3。2,
  测试下:rootubuntulab:homemiaodockerexecitnginxnet02pingnginxnet01PINGnginxnet01(192。168。3。2)56(84)bytesofdata。64bytesfromnginxnet01。mynet(192。168。3。2):icmpseq1ttl64time0。215ms64bytesfromnginxnet01。mynet(192。168。3。2):icmpseq2ttl64time0。175ms
  不用额外配置,自定义网络直接可以ping通,牛了。3。3跨网络访问
  我们把nginx02,nginx03也启动起来,现在的docker的容器的网络情况如下图:
  如上图,如果我们想通过nginx02访问nginxnet01怎么办,这个场景也比较常见,比如我们的应用在一个网络环境,数据库在另外一个网络环境(我这么懒应该不会这么部署)。我们把nginx02连接到mynet网络上去rootubuntulab:homemiaodockernetworkconnectmynetnginx02查看执行成功后的变化:rootubuntulab:homemiaodockernetworkinspectmynetContainers:{3748ab1cb1e07f590dce7283d9e40f2edcc6fa15c1ebfefe4a4d6441e9ec5a25:{Name:nginx02,EndpointID:7f7aea9645f2dee4502122f3bd302aa662b55ec31f972827246b8e381904b42b,MacAddress:02:42:c0:a8:03:04,IPv4Address:192。168。3。424,IPv6Address:},c44262be7824f4649f96b0df83ac44460f7c49c135577ee832af2a93f0cf81e3:{Name:nginxnet01,EndpointID:b925305ae883ca4d621983bac339f16e87580a37e9e89dfb41c8fbd51b819213,MacAddress:02:42:c0:a8:03:02,IPv4Address:192。168。3。224,IPv6Address:},c488ece52f691fd228916df2046fa17efd971ad81299d46f358be6c372593095:{Name:nginxnet02,EndpointID:5e1ecdcbbaba78fa050a69780543f82dd90a445e8fcea8170e383b5161ca5dd7,MacAddress:02:42:c0:a8:03:03,IPv4Address:192。168。3。324,IPv6Address:}},
  原来是把nginx02直接加入到mynet网络,分配一个新的ip:192。168。3。4,相当于这个容器有了两个ip:rootubuntulab:homemiaodockerexecitnginx02pingnginxnet01PINGnginxnet01(192。168。3。2)56(84)bytesofdata。64bytesfromnginxnet01。mynet(192。168。3。2):icmpseq1ttl64time11。9ms64bytesfromnginxnet01。mynet(192。168。3。2):icmpseq2ttl64time0。127msCnginxnet01pingstatistics2packetstransmitted,2received,0packetloss,time1003msrttminavgmaxmdev0。1276。00311。8805。876msrootubuntulab:homemiaodockerexecitnginx02pingnginxnet02PINGnginxnet02(192。168。3。3)56(84)bytesofdata。64bytesfromnginxnet02。mynet(192。168。3。3):icmpseq1ttl64time0。184ms64bytesfromnginxnet02。mynet(192。168。3。3):icmpseq2ttl64time0。080m
  如上,现在ping稳稳的,那么我们来看看nginx02的网卡信息:root3748ab1cb1e0:ipaddr1:lo:LOOPBACK,UP,LOWERUPmtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000linkloopback00:00:00:00:00:00brd00:00:00:00:00:00inet127。0。0。18scopehostlovalidlftforeverpreferredlftforever47:eth0if48:BROADCAST,MULTICAST,UP,LOWERUPmtu1500qdiscnoqueuestateUPgroupdefaultlinkether02:42:ac:11:00:03brdff:ff:ff:ff:ff:fflinknetnsid0inet172。17。0。316brd172。17。255。255scopeglobaleth0validlftforeverpreferredlftforever49:eth1if50:BROADCAST,MULTICAST,UP,LOWERUPmtu1500qdiscnoqueuestateUPgroupdefaultlinkether02:42:c0:a8:03:04brdff:ff:ff:ff:ff:fflinknetnsid0inet192。168。3。424brd192。168。3。255scopeglobaleth1validlftforeverpreferredlftforever
  原来是新建立veth对,配置ip是mynet里面网段的ip,看看桥里面信息:rootubuntulab:homemiaobrctlshowbridgenamebridgeidSTPenabledinterfacesbrdb74fc9a41e48000。024238d7721anoveth28769e3veth8adc720vetha525bf6
  这个是通过新建个网桥把三个网卡连接起来了。我理解这相当于通过一个交换机把三者都接起来,只是在nginx02上新增了一块网卡。看下:rootubuntulab:homemiaodockerexecitnginxnet02binbashrootc488ece52f69:ipaddr1:lo:LOOPBACK,UP,LOWERUPmtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000linkloopback00:00:00:00:00:00brd00:00:00:00:00:00inet127。0。0。18scopehostlovalidlftforeverpreferredlftforever41:eth0if42:BROADCAST,MULTICAST,UP,LOWERUPmtu1500qdiscnoqueuestateUPgroupdefaultlinkether02:42:c0:a8:03:03brdff:ff:ff:ff:ff:fflinknetnsid0inet192。168。3。324brd192。168。3。255scopeglobaleth0validlftforeverpreferredlftforever
  这里面有要注意的地方,mynet网络的主机只有一个ip。其实还有更复杂的场景没测试,我觉得现在这个也够了,下次用到再说。

CAN海鲜自助加盟条件总部费用CAN海鲜自助加盟美味独特不管是夏秋天还是春冬天都是人们喜爱的餐饮,CAN海鲜自助加盟有着消费市场广,如果你想要创业,我推荐CAN海鲜自助加盟、投资新选择。mdash;m……禾斗海鲜自助加盟条件总部费用开禾斗海鲜自助加盟店如何才能获得更好的发展?这个问题,一直是很多餐饮店经营者关注的。美味的开禾斗海鲜自助加盟能够受到大家的欢迎,所以对于餐饮加盟店的发展,首先需要确保味道。说到……中华第五届国际圆梦杯慈善投资公益大赛赛事背景:为推动《国务院关于推进海南国际旅游岛建设发展的若干意见》以及《海南国际旅游岛建设规划发展纲要》关于ldquo;探索发展体育竞彩rdquo;落地,贯彻落实海南省人民政府……cx4怎么样(cx4和cx5对比)不要问我为什么买马自达,问就是情怀。小编于2020年11月底购置了马自达CX4(2021款2。0L自动两驱蓝天探索版)落地17万,开了3个月来说说我的看法。1。油耗……MiraMikati2022春夏系列,彩色图案的活力,多样张MiraMikati的这些服装之中,采用了很多明度很高的鲜艳颜色,这些鲜艳的颜色之间,以色彩的撞色冲击,构成了活力满满的花纹图案;将这些花纹图案使用在服装上的时候,为格纹……钜派观点公募基金万亿级增量资金推动二级市场走出慢牛行情来源:新浪证券尽管年后A股市场震荡回调,但新基金发行市场热度不减。继上周两个交易日出现三只爆款基金后,本周又出现了一只混合基金的单日认购规模超300亿元。钜派投资股权团队……拼与不拼大不同2022年世界女排联赛保加利亚站比赛观感之四在我们战胜了波兰女排之后,对阵多米尼加女排的这一场比赛就显得极为关键,可以说,这场比赛的胜负基本决定了中国女排能否把进军总决赛的主动权牢牢握在自己手中。而昨晚中国女排以3:0横……国乒发布祝福视频,陈梦孙颖莎喜气洋洋王楚钦有些与众不同国乒像往常一样都会在重要的节日邀请主力球员为全国观众送上节日祝福,在劳动节来临之际,我们的主力球员再度集结一堂为球迷送来节日祝福。众所周知,现阶段国乒队员都处于休假状态,让我们……华为新品发布会月底召开畅享50Pro即将登场中关村在线消息:昨天下午,华为召开新品发布会,发布了包含影像性能机华为nova10系列、华为WatchFIT2、问界M7等诸多新品。今日微博博主曝光了华为月底还有一场发布会,预……最强美女经纪人!为两大球星签4。38亿美金,再创NBA历史自由市场开启后,美媒陆续曝出了各支球队的签约消息。其中,太阳队已经和当家球星德文布克提前续约了一份4年高达2。14亿美金的顶薪合同。同时,森林狼队也和自家球星卡尔安东尼唐斯完成……手机不贴膜会怎么样(小米手机官方建议不贴膜)作为一个玩智能手机的折腾党,刷过机、越过狱、修过排线、换过屏、大水果大三丧大火腿大乐金大狗摩大联想大粗粮大魅族大菊花往机如烟云纷纷过,铁打的双手流水的机,更是几乎给身边所有人贴……首钢滑雪大跳台出发区恢复参观!铁汁们!许久不见呀,这次给大家带来一个好消息,鉴于北京市疫情防控趋于稳定,本周末大跳台出发区参观恢复运营,大跳台出发区冷却塔落地区联票恢复售卖。购票后,您可于水晶鞋鞋跟处……
世界级一体化新石化基地全面投产2月27日,随着世界单套规模最大的80万吨年苯乙烯装置顺利投产,中国石油广东石化2000万吨年炼油、120万吨年乙烯、260万吨年对二甲苯炼化一体化项目打通全流程并全部产出合格……股神巴菲特44年来最短股东信,说了些啥澎湃新闻记者孙铭蔚北京时间2月25日晚间,股神沃伦巴菲特发布了一年一度的股东信。巴菲特视觉中国资料图每年2月,巴菲特都会写一封信来回顾过去一年他投资的收获和教……不得不说,今年的裤子还是露脚踝更好看,尤其适合小个子今年春天的衣橱里一定要备一条时髦百搭的露踝裤,露出纤细的脚踝线条可以有效的在视觉上起到拉长腿部比例的效果,显高不挑人,就算是个子娇小的姐妹们驾驭起来也毫无压力。这篇文章就……达芬奇DaVinciResolveStudio18软件下载件达芬奇的用处是什么?达芬奇18。0版剪辑软件是一款视频处理工具,这是一款非常专业的软件,里面的许多功能都是非常的强大。设计师常用的一些软件里,必然少不了这个。DaVinciRe……被三木惊艳到了,无龄感穿搭知性得体,不管30岁50岁都能穿新年想要换一种穿搭风格,大家一定要参考一下三木博主的搭配方式!通过穿搭思路的灵活运用和基础款单品的搭配组合,毫不费力打造出兼具功能性和时尚感的高级范儿穿搭。这篇文章就来为……欧文要价两个亿,蔡老板愿不愿意进行一次豪赌有消息人士透露,目前欧文正寻求与篮网达成一份最大金额为4年2亿美元的续约合同,这个消息绝不是空穴来风。因为欧文的经纪人,也就是他的继母,也向媒体透露,他们已经就此事联系了……不屈顽强导演惊天大逆转!穆雷诠释巨头何以成为巨头5小时45分钟!雷sir完成了一场不可思议的逆转!一场漫长的马拉松鏖战,比赛结束时钟已经指向了后半夜。饶是最忠实的球迷能坚持到此时的恐怕也为数不多,能从头看到尾的更是不可……40岁左右的女人,过年别再烫奶奶卷!试试这3款发型,特洋气很多人都说40岁是一个女人的分水岭,40岁之前的我们还可以装年轻扮嫩,但过了40岁以后,我们的气质就会越发成熟,这时候就算你扮嫩,也很容易暴露你实际的年龄感,但就算如此,到了4……发达经济体央行面临艰难抉择2022年,发达经济体央行的货币政策成为左右全球经济形势的关键变量。面对高通胀带来的持续刺痛,过去一年中各国央行货币政策变化之剧烈近数十年罕见。展望2023年,发达经济体……专访刘殿座亚冠先争取小组出线珍惜为国征战的每一天记者鲁蜜报道上赛季中超,武汉三镇夺得了冠军,对于中超新军而言,夺冠的经历是新鲜而难忘的。不过,对于刘殿座而言,他的足球生涯里已经有过这样的经历,再次拿到冠军奖杯,值得欣喜,但是……国庆探访河南最美的古塔安阳文峰塔(Day12,10月12日)安阳文峰塔是我们此次国庆河南之行期间印象最深刻的几座佛塔之一。文峰塔总平面图首先是高:38米的身高,开车行驶在安阳市文峰路上远远就能看得到它。文峰路上远观文峰……一入孤美深似海孤独的美食家第二季酣畅淋漓美食之旅孤独的美食家,第二季,全新到来在经过了最为经典的第一季的洗礼你对于日本文化是不是又有了全新的认识呢是不是发现日本料理的精髓远不至于寿司,味噌汤那样简单呢……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网