问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Docker-高级篇(2)-Docker四大网络&自定义网络

发布网友 发布时间:2024-09-27 15:54

我来回答

1个回答

热心网友 时间:2024-10-01 00:12

导言

两个或者多个之间的容器如何相互通信?

容器重启后IP变化如何解决?

容器内部间如何通过容器名通信?

如何自定义网络,让同属一个服务群的容器都加入到同一个网络?

一、宿主机网络

Docker网络用于处理宿主机和容器内网络通信

容器间的互联和通信以及端口映射

容器IP变动时候可以通过服务名直接网络通信而不受到影响

Docker未启动情况下,宿主机的网络情况

系统通过vagrant安装和启动

此时有eth0和lo(local)两个网卡

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500 inet 192.168.33.10netmask 255.255.255.0broadcast 192.168.33.255 inet6 fe80::a00:27ff:fe29:956cprefixlen 64scopeid 0x20<link> ether 08:00:27:29:95:6ctxqueuelen 1000(Ethernet) RX packets 204bytes 20733 (20.2 KiB) RX errors 0dropped 0overruns 0frame 0 TX packets 144bytes 23742 (23.1 KiB) TX errors 0dropped 0 overruns 0carrier 0collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> ?mtu 65536 inet 127.0.0.1 ?netmask 255.0.0.0 inet6 ::1 ?prefixlen 128 ?scopeid 0x10loop ?txqueuelen 1000 ?(Local Loopback) RX packets 64 ?bytes 5184 (5.0 KiB) RX errors 0 ?dropped 0 ?overruns 0 ?frame 0 TX packets 64 ?bytes 5184 (5.0 KiB) TX errors 0 ?dropped 0 overruns 0 ?carrier 0 ?collisions 0

3. docker启动情况下,宿主机的网络情况 - 此时宿主机会产生一个名为**docker0**的虚拟网桥```shelldocker0: flags=4099<UP,BROADCAST,MULTICAST>mtu 1500inet 172.17.0.1netmask 255.255.0.0broadcast 172.17.255.255ether 02:42:f7:55:5a:bdtxqueuelen 0(Ethernet)RX packets 0bytes 0 (0.0 B)RX errors 0dropped 0overruns 0frame 0TX packets 0bytes 0 (0.0 B)TX errors 0dropped 0 overruns 0carrier 0collisions 0eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500inet 192.168.33.10netmask 255.255.255.0broadcast 192.168.33.255inet6 fe80::a00:27ff:fe29:956cprefixlen 64scopeid 0x20<link>ether 08:00:27:29:95:6ctxqueuelen 1000(Ethernet)RX packets 204bytes 20733 (20.2 KiB)RX errors 0dropped 0overruns 0frame 0TX packets 144bytes 23742 (23.1 KiB)TX errors 0dropped 0 overruns 0carrier 0collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>mtu 65536inet 127.0.0.1netmask 255.0.0.0inet6 ::1prefixlen 128scopeid 0x10<host>looptxqueuelen 1000(Local Loopback)RX packets 64bytes 5184 (5.0 KiB)RX errors 0dropped 0overruns 0frame 0TX packets 64bytes 5184 (5.0 KiB)TX errors 0dropped 0 overruns 0carrier 0collisions 0二、Docker网络

查看docker网络模式命令

docker network <COMMAND>

可以使用的命令如下

[root@server01 ~]# docker network --help

Usage: ?docker network COMMAND

Manage networks

Commands: connect ? ? Connect a container to a network create ? ? ?Create a network disconnect ?Disconnect a container from a network inspect ? ? Display detailed information on one or more networks ls ? ? ? ? ?List networks prune ? ? ? Remove all unused networks rm ? ? ? ? ?Remove one or more networks

3. 查看网卡列表```shell[root@server01 ~]# docker network lsNETWORK ID NAMEDRIVERSCOPEad11a58c25cc bridgebridgelocal1524da0505ee hosthostlocalf4cbc4779eaf nonenulllocal

可以看到默认创建3大网络模式

查看网卡信息

[{ "Name": "bridge", "Id": "ad11a58c25cc80747576c2ef7c2ca09b960fe0565b4c6ab7032ed9dfdba94ca2", "Created": "2022-03-20T12:41:29.966511242Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.17.0.0/16", "Gateway": "172.17.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", # 可以看到bridge用的网桥名称就是docker0 "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" }, "Labels": {}}]

创建和删除网卡

# 原始所有网卡信息[root@server01 ~]# docker network lsNETWORK ID NAMEDRIVERSCOPEad11a58c25cc bridgebridgelocal1524da0505ee hosthostlocalf4cbc4779eaf nonenulllocal# 创建网卡[root@server01 ~]# docker network create my_network146a5d4683a8ef8256ce5280eabb719c5d7da061f317f03529dedbf4fe8ee2a5[root@server01 ~]# docker network lsNETWORK ID NAME DRIVERSCOPEad11a58c25cc bridge bridgelocal1524da0505ee host hostlocal# 默认创建的网卡类型是桥接类型146a5d4683a8 my_network bridgelocalf4cbc4779eaf none nulllocal# 删除网卡[root@server01 ~]# docker network rm my_networkmy_network[root@server01 ~]# docker network lsNETWORK ID NAMEDRIVERSCOPEad11a58c25cc bridgebridgelocal1524da0505ee hosthostlocalf4cbc4779eaf nonenulllocal三、网络模式3.1 bridge模式

Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,将所有容器和本地主机都放到同一个物理网络

Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信

为每一个容器分配和设置ip,并将容器连接到docker0,虚拟网桥默认为该模式

使用 --network ?bridge 指定容器使用的网络模式,默认bridge(docker0)

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为容器ip(Container-IP),同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信

docker run 的时候,如果没有指定network则默认使用的网桥模式就是bridge,使用的就是docker0。在宿主机ifconfig可以看到docker0和创建的的networketh0,eth1,eth2……代表网卡一,网卡二,网卡三……,lo代表127.0.0.1,即localhost,inet addr用来表示网卡的IP地址

网桥docker0创建一对对等虚拟设备接口一个叫veth,另一个叫eth0,成对匹配

整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair)

每个容器实例内部同时有一块网卡,每个接口叫eth0

docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。 通过配对网卡,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络互通

运行alpine(一个微型的linux版本) 容器,进入redis容器内容查看网络信息和宿主机网络信息

docker pull alpine

docker run -d --name alpine alpine:latest

docker exec -it apline bash

alpine容器内部

/ # ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever# eth0@if11:表示连接到宿主机的11号网卡信息10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UPlink/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ffinet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever

宿主机网络信息

# veth02096c1@if10:表示连接到容器内部的10号网卡11: veth02096c1@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group defaultlink/ether fe:e5:f2:56:6d:07 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::fce5:f2ff:fe56:6d07/64 scope linkvalid_lft forever preferred_lft forever

对应关系如下

3.2 host模式

直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换

使用--network host指定

查看host网卡信息

[ { "Name": "host", "Id": "1524da0505eef1c3f188e337551fe0259b99c3e00915fd9eafea288aa4ec69c9", "Created": "2022-03-06T06:55:13.717636641Z", "Scope": "local", # 驱动为host "Driver": "host", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} }]3. docker启动情况下,宿主机的网络情况 - 此时宿主机会产生一个名为**docker0**的虚拟网桥```shelldocker0: flags=4099<UP,BROADCAST,MULTICAST>mtu 1500inet 172.17.0.1netmask 255.255.0.0broadcast 172.17.255.255ether 02:42:f7:55:5a:bdtxqueuelen 0(Ethernet)RX packets 0bytes 0 (0.0 B)RX errors 0dropped 0overruns 0frame 0TX packets 0bytes 0 (0.0 B)TX errors 0dropped 0 overruns 0carrier 0collisions 0eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500inet 192.168.33.10netmask 255.255.255.0broadcast 192.168.33.255inet6 fe80::a00:27ff:fe29:956cprefixlen 64scopeid 0x20<link>ether 08:00:27:29:95:6ctxqueuelen 1000(Ethernet)RX packets 204bytes 20733 (20.2 KiB)RX errors 0dropped 0overruns 0frame 0TX packets 144bytes 23742 (23.1 KiB)TX errors 0dropped 0 overruns 0carrier 0collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>mtu 65536inet 127.0.0.1netmask 255.0.0.0inet6 ::1prefixlen 128scopeid 0x10<host>looptxqueuelen 1000(Local Loopback)RX packets 64bytes 5184 (5.0 KiB)RX errors 0dropped 0overruns 0frame 0TX packets 64bytes 5184 (5.0 KiB)TX errors 0dropped 0 overruns 0carrier 0collisions 00

如果容器启动在此模式下,内部将只有lo地址

3.4 container模式

新建的容器和已经存在的一个容器共享网络ip和配置,而不会创建自己的网卡,配置自己的IP等

两个容器除了网络方面,其他的如文件系统、进程列表等依然隔离

使用--network container:NAME 或者容器ID指定

先运行基础容器

docker run -it --name alpine alpine:latest

3. docker启动情况下,宿主机的网络情况 - 此时宿主机会产生一个名为**docker0**的虚拟网桥```shelldocker0: flags=4099<UP,BROADCAST,MULTICAST>mtu 1500inet 172.17.0.1netmask 255.255.0.0broadcast 172.17.255.255ether 02:42:f7:55:5a:bdtxqueuelen 0(Ethernet)RX packets 0bytes 0 (0.0 B)RX errors 0dropped 0overruns 0frame 0TX packets 0bytes 0 (0.0 B)TX errors 0dropped 0 overruns 0carrier 0collisions 0eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500inet 192.168.33.10netmask 255.255.255.0broadcast 192.168.33.255inet6 fe80::a00:27ff:fe29:956cprefixlen 64scopeid 0x20<link>ether 08:00:27:29:95:6ctxqueuelen 1000(Ethernet)RX packets 204bytes 20733 (20.2 KiB)RX errors 0dropped 0overruns 0frame 0TX packets 144bytes 23742 (23.1 KiB)TX errors 0dropped 0 overruns 0carrier 0collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>mtu 65536inet 127.0.0.1netmask 255.0.0.0inet6 ::1prefixlen 128scopeid 0x10<host>looptxqueuelen 1000(Local Loopback)RX packets 64bytes 5184 (5.0 KiB)RX errors 0dropped 0overruns 0frame 0TX packets 64bytes 5184 (5.0 KiB)TX errors 0dropped 0 overruns 0carrier 0collisions 01

再运行alpine,然后指定基础基础容器

docker run -it --network container:alpine --name alpine-01 alpine:latest

3. docker启动情况下,宿主机的网络情况 - 此时宿主机会产生一个名为**docker0**的虚拟网桥```shelldocker0: flags=4099<UP,BROADCAST,MULTICAST>mtu 1500inet 172.17.0.1netmask 255.255.0.0broadcast 172.17.255.255ether 02:42:f7:55:5a:bdtxqueuelen 0(Ethernet)RX packets 0bytes 0 (0.0 B)RX errors 0dropped 0overruns 0frame 0TX packets 0bytes 0 (0.0 B)TX errors 0dropped 0 overruns 0carrier 0collisions 0eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500inet 192.168.33.10netmask 255.255.255.0broadcast 192.168.33.255inet6 fe80::a00:27ff:fe29:956cprefixlen 64scopeid 0x20<link>ether 08:00:27:29:95:6ctxqueuelen 1000(Ethernet)RX packets 204by
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
水笔在手上画画会不会被衣服搽掉下来 老人每天大便次数很多量不多也不稀,每天还会拉三四次水应经三个月了... 从大连飞机场怎么去大连经济开发区5彩城K区的大连金港大酒店 除了打 ... 请问从大连周水子国际机场到经济技术开发区怎么走最省钱? 中国古代名刀总录中国古代十大名刀 怎样把qq安装到iphone里面 苏科大什么梗 苏科大叫什么名字 lol苏科大是苏州科技大学的吗 lol苏州科技大学为什么这么厉害 优尔精医用降温贴是不是保健品? 使用docker部署后,宿主机怎么通过容器ip访问到容器应用? ...求四个类似于情侣网名的四人网名,还有头像,大家有吗 6 张图详解 Docker 容器网络配置 中国出口港口有哪些 彻底弄懂docker网络 为什么说铺地砖时,留缝很重要原因是什么呢 我要关于流氓兔和米菲兔的个性签名、网名,分组,头像(情侣的,卡哇依,可爱... ...给我一张一只兔子穿着怪盗基德的衣服的QQ头像图片,要快啊,最好能... Docker 容器网络配置详解 莎拉·霍尔的死亡画像:如何在艺术中探索生命与死亡? 大米和火锅丸子一起煮好吗 艺术必须死亡:王南溟的理论探讨 深静脉血栓评分什么意思 血栓风险评分 我有3个CS1.6插件的RAR压缩包,我想都让他们显示在游戏中,可是... CS1.6怎么修改子弹数、后坐力、威力、时间?我明明下载了插件,可就是... 哪位大虾能教我安装cs1.6僵尸插件啊A-A CS1.6的插件放在哪啊?我怎么没有那个文件夹啊?给个有的下载地址给我啊... 什么是物上代位 深静脉血栓评分caprini什么意思 【后台技术】Docker网络篇 帅丰集成灶溢水就坏是属于质量问题吗?溢水两次灶头就打不着火,自动熄火... 汽车玻璃膜撕掉后的胶怎么去除 华硕r557li这款机子怎么样,质量散热如何 华硕(ASUS) R557LI 跟华硕(ASUS)经典系列R454LJ 哪款好点啊??_百度知 ... ...但是我把我得身份证号和名字告诉对方。会不会对我有损失啊。_百度知... ...把自己的姓名和身份证号码告诉他了 然后我觉得不对路就挂电话了_百... 哪个牛奶含钙量高 excel 随机生成多列数据,而生成的多列数据累计求和等于一个固定的数... excel中某些单元格为随机生成数据另外一个单元格用随机数据公式计算后... EXCEL中我想随机生成一组数字B,要求是随机数字不能超过A的1. excel一个区域内(1,10)的随机数允许大于10,但不能超过指定个数.比如... a是什么车标 怎样让excel表格随机选择另一列数据中的一个? 泰山颜悦真假图片对比 苹果平板电脑密码忘记怎么解锁 荣耀平板忘记锁屏密码怎么办? 平板解锁忘密码怎么办? 怎样取消word中的宏功能? word取消宏设置方法如何取消word宏