Docker-10-网络类型

297 阅读3分钟

「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」。

我们知道容器的优点是轻量化,轻量化的结果就是功能单一数量大,在多个容器的场景下,难免就需要解决容器之间相互通信的问题,今天我们就来一起看看 Docker 的网络类型。

Bridge 类型

Bridge 类型,也是 Docker 的默认类型,使用独立的一个 IP 段创建一个网桥 docker0,同时为每个容器分配一个这个 IP 段的 IP,实现基于网桥 A 的容器间通信。

基于网桥的通信

以默认网络类型启动一个容器:

默认网络

--network 是可选参数

架构图

image

Host 类型

Host 类型,也就是主机类型,与主机共享 Network NameSpace,网络资源和主机保持一致,一般用于单容器服务。
主机网络配置:(docker0enp0s3-15enp0s8-103lo)

主机网络配置

容器网络配置:(docker0enp0s3-15enp0s8-103lo

容器网络配置

即容器内的网络配置和 Host 完全一致。

Container 类型

Container 类型,顾名思义为容器网络类型,即两个容器共享命名空间,比如容器 AX 网络类型,网络配置为 Z,容器 B 使用了容器 Acontainer 网络类型,则 B 的网络配置也为 Z

容器A

容器B

如上,alpine_Aalpine_B 两个容器的网络配置完全一样,因为 alpine_B 使用的 alpine_A 的网络命名空间。

None 类型

None 类型,即没有任何网络配置。

None类型网络

容器中除了 lo 口无任何网络配置。

None 类型如何配置固定 IP 呢?

root@phyger-xubuntu:/home/phyger# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6829b4ce91aa        alpine              "sh"                9 seconds ago       Up 6 seconds                            alpine_B
e2e76f8df2a6        alpine              "sh"                15 minutes ago      Up 15 minutes                           alpine_none

#查询两个None模式容器的Pid
root@phyger-xubuntu:/home/phyger# docker inspect e2e7 | grep -w  Pid
            "Pid": 4162,
root@phyger-xubuntu:/home/phyger# docker inspect 6829 | grep -w  Pid
            "Pid": 4375,

#创建/var/run/netns 目录,并且增加虚拟网络命名空间2个
root@phyger-xubuntu:/home/phyger# mkdir -p /var/run/netns
root@phyger-xubuntu:/home/phyger# ln -s /proc/4162/ns/net /var/run/netns/4162
root@phyger-xubuntu:/home/phyger# ln -s /proc/4375/ns/net /var/run/netns/4375

#创建一对虚拟网卡,并且将其up
root@phyger-xubuntu:/home/phyger# ip link add name veth0 type veth peer name veth1
root@phyger-xubuntu:/home/phyger# ip link set up veth1
root@phyger-xubuntu:/home/phyger# ip link set up veth0

#将一个veth0挂在容器A的netns上,另一个veth1挂在容器B的netns上
root@phyger-xubuntu:/home/phyger# ip link set veth0 netns 4162
root@phyger-xubuntu:/home/phyger# ip link set veth1 netns 4375

#修改两个容器中的虚拟网卡的name并且配置固定IP
root@phyger-xubuntu:/home/phyger# ip netns exec 4162 ip link set veth0 name eth0
root@phyger-xubuntu:/home/phyger# ip netns exec 4375 ip link set veth1 name eth0
root@phyger-xubuntu:/home/phyger# ip netns exec 4375 ip addr add 1.0.0.11/32 dev eth0
root@phyger-xubuntu:/home/phyger# ip netns exec 4162 ip addr add 1.0.0.22/32 dev eth0

#将两个容器中的虚拟网卡UP起来
root@phyger-xubuntu:/home/phyger# ip netns exec 4162 ip link set eth0 up
root@phyger-xubuntu:/home/phyger# ip netns exec 4375 ip link set eth0 up

#在两个容器中分别添加对向路由
root@phyger-xubuntu:/home/phyger# ip netns exec 4162 ip route add 1.0.0.11/32 dev eth0
root@phyger-xubuntu:/home/phyger# ip netns exec 4375 ip route add 1.0.0.22/32 dev eth0

查看结果:

结果

到此,成功!