Docker的网络模式介绍

59次阅读
没有评论

共计 6716 个字符,预计需要花费 17 分钟才能阅读完成。

这篇文章主要介绍“Docker 的网络模式介绍”,在日常操作中,相信很多人在 Docker 的网络模式介绍问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Docker 的网络模式介绍”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

1、Docker 的四种网络模式

(1)docker 四种网络模式如下:

 Bridge contauner    桥接式网络模式

 Host(open) container    开放式网络模式

 Container(join) container    联合挂载式网络模式,是 host 网络模式的延伸

 None(Close) container    封闭式网络模式

(2)可以通过 docker network 命令查看

[root@along ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
f23b4899add1 bridge bridge local
65520497f693 host host local
a0c5f18e0f04 none null local

(3)docker run –network  命令可以指定使用网络模式

2、Bridge  网络模式 2.1  介绍

当 Docker 进程启动时,会在主机上创建一个名为 docker0 的虚拟网桥,此主机上启动的 Docker 容器会连接到这个虚拟网桥上,所以有默认地址 172.17.0.0/16 的地址。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

从 docker0 子网中分配一个 IP 给容器使用,并设置 docker0 的 IP 地址为容器的默认网关。在主机上创建一对虚拟网卡 veth pair 设备,Docker 将 veth pair 设备的一端放在新创建的容器中,并命名为 eth0(容器的网卡),另一端放在主机中,以 vethxxx 这样类似的名字命名,并将这个网络设备加入到 docker0 网桥中。可以通过 brctl show 命令查看。

[root@along ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.024241c45d6e no

bridge 模式是 docker 的默认网络模式,不写 –net 参数,就是 bridge 模式。使用 docker run - p 时,docker 实际是在 iptables 做了 DNAT 规则,实现端口转发功能。可以使用 iptables -t nat -vnL 查看。

[root@along ~]# iptables -t nat -vnL
Chain POSTROUTING (policy ACCEPT 20 packets, 1238 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 MASQUERADE all -- * !docker0 172.17.0.0/16 0.0.0.0/0

2.2 bridge 模式示意图

2.3  演示

bridge  网络模式;–network 不指定,默认也是 bridge 模式

[root@along ~]# docker run --name b1 -it --network bridge --rm busybox:latest 
/ # ifconfig 
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02 
 inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
 inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:12 errors:0 dropped:0 overruns:0 frame:0
 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0 
 RX bytes:1016 (1016.0 B) TX bytes:508 (508.0 B)
lo Link encap:Local Loopback 
 inet addr:127.0.0.1 Mask:255.0.0.0
 inet6 addr: ::1/128 Scope:Host
 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:1 
 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
/ # ping 10.11.55.5  正常访问宿主机
PING 10.11.55.5 (10.11.55.5): 56 data bytes
64 bytes from 10.11.55.5: seq=0 ttl=64 time=0.292 ms
/ # exit

3、Host  网络模式 3.1  介绍

如果启动容器的时候使用 host 模式,那么这个容器将不会获得一个独立的 Network Namespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

3.2 Host 模式示意图

3.3  演示

[root@along ~]# docker run --name b2 -it --network host --rm busybox:latest
/ # ifconfig -a  和宿主机一样
docker0 Link encap:Ethernet HWaddr 02:42:41:C4:5D:6E 
 inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
 inet6 addr: fe80::42:41ff:fec4:5d6e/64 Scope:Link
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:90 errors:0 dropped:0 overruns:0 frame:0
 TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0 
 RX bytes:5903 (5.7 KiB) TX bytes:2381 (2.3 KiB)
eth0 Link encap:Ethernet HWaddr 00:0C:29:AB:D2:DA 
 inet addr:10.11.55.5 Bcast:10.11.55.255 Mask:255.255.255.0
 inet6 addr: fe80::20c:29ff:feab:d2da/64 Scope:Link
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:3913 errors:0 dropped:0 overruns:0 frame:0
 TX packets:3327 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000 
 RX bytes:354314 (346.0 KiB) TX bytes:919096 (897.5 KiB)
lo Link encap:Local Loopback 
 inet addr:127.0.0.1 Mask:255.0.0.0
 inet6 addr: ::1/128 Scope:Host
 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:1 
 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

4、Container  网络模式 4.1  介绍

这个模式指定新创建的容器和已经存在的一个容器共享一个  Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的  IP,而是和一个指定的容器共享  IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过  lo  网卡设备通信。

4.2 Container 模式示意图

4.3  演示

(1)在一个终端,使用 bridge 网络模式启动容器 b1

[root@along ~]# docker run --name b1 -it --rm busybox:latest 
/ # ifconfig b1 的 ip 为 172.17.0.2
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02 
 inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
 inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:6 errors:0 dropped:0 overruns:0 frame:0
 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0 
 RX bytes:508 (508.0 B) TX bytes:508 (508.0 B)
lo Link encap:Local Loopback 
 inet addr:127.0.0.1 Mask:255.0.0.0
 inet6 addr: ::1/128 Scope:Host
 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:1 
 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ # echo  hello world b1    /tmp/index.html
/ # httpd -h /tmp/  在 b1 上启动 httpd 服务
/ # netstat -nutl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State 
tcp 0 0 :::80 :::* LISTEN

(2)在另一个终端使用 Container  网络模式创建容器 b2

[root@along ~]# docker run --name b2 -it --network container:b1 --rm busybox:latest
/ # ifconfig -a b2 的 ip 和 b1 一样
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02 
 inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
 inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:8 errors:0 dropped:0 overruns:0 frame:0
 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0 
 RX bytes:648 (648.0 B) TX bytes:648 (648.0 B)
lo Link encap:Local Loopback 
 inet addr:127.0.0.1 Mask:255.0.0.0
 inet6 addr: ::1/128 Scope:Host
 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:1 
 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ # wget -O - -q 127.0.0.1 b1 启动的 httpd 服务,在 b2 上直接访问
hello world b1
/ # ls /tmp/  但是文件系统并不共享,只共享网络 

5、None  网络模式 5.1  介绍

使用 none 模式,Docker 容器拥有自己的 Network Namespace,但是,并不为 Docker 容器进行任何网络配置。也就是说,这个 Docker 容器没有网卡、IP、路由等信息,只有 lo  网络接口。需要我们自己为 Docker 容器添加网卡、配置 IP 等。

不参与网络通信,运行于此类容器中的进程仅能访问本地回环接口;仅适用于进程无须网络通信的场景中,例如:备份、进程诊断及各种离线任务等。

5.2 Node 模式示意图

5.3  演示

[root@along ~]# docker run --name b1 -it --network none --rm busybox:latest 
/ # ifconfig 
lo Link encap:Local Loopback 
 inet addr:127.0.0.1 Mask:255.0.0.0
 inet6 addr: ::1/128 Scope:Host
 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:1 
 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
/ # exit

到此,关于“Docker 的网络模式介绍”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计6716字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)