​Docker网络模式

发布时间:2024-11-12 人气:77次

Docker网络模式

前面用的容器间通信方式:link,但是link有局限性,是单向的。目前的架构Wordpress还好,但若是需要双向的通信呢?比如zabbix 服务端需要连客户端,客户端也需要连服务端。

桥接模式

创建一个容器,默认就桥接模式。所创建容器的IP与宿主机docker 0网卡是桥接的,所以都在同一网段。

桥接模式.jpg

## 查看docker的网络模式[root@docker01 ~]# docker network lsNETWORK ID     NAME     DRIVER   SCOPE26e92ba33e52   bridge   bridge   local95d934d84d9e   host     host     locald5ffe092a454   none     null     local

## 查看详细信息(docker inspect既可以看镜像和容器,也可以看网络)[root@docker01 ~]# docker inspect bridge...

## 查看桥接网卡信息[root@docker01 ~]# yum install -y bridge-utils[root@docker01 ~]# brctl show //查看桥接网卡有哪些。bridge namebridge idSTP enabledinterfacesdocker08000.024220d487a4no   veth0ca285c    vethc81af12                                     ## docker常用网络工具镜像:busybox[root@docker01 ~]# docker pull busybox[root@docker01 ~]# docker run -it busybox /bin/sh/ # ifconfig比如起第一个是172.17.0.5,再起一个就是172.17.0.6/ # ping 172.17.0.4、6都是通的

如何修改桥接网卡网段(比如公司要求容器都跑在某个网段)

# 方法一:修改docker启动脚本[root@docker01 ~]# vim /usr/lib/systemd/system/docker.service...ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --bip=192.168.1.1/24

dockerd --help 可以看一眼--bip就是bridge ip,比如--bip=192.168.1.1是docker 0的IP地址

[root@docker01 ~]# systemctl daemon-reload[root@docker01 ~]# systemctl restart docker

看一下,已改为192.168.1.1[root@docker01 ~]# ifconfigdocker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500      inet 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255      inet6 fe80::42:87ff:fe26:c6c0 prefixlen 64 scopeid 0x20<link>      ether 02:42:87:26:c6:c0 txqueuelen 0 (Ethernet)      RX packets 266260 bytes 17590018 (16.7 MiB)      RX errors 0 dropped 0 overruns 0 frame 0      TX packets 365156 bytes 210130583 (200.3 MiB)      TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0       [root@docker01 ~]# docker run -it busybox /bin/sh/ # ip a114: eth0@if115: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue  link/ether 02:42:c0:a8:01:02 brd ff:ff:ff:ff:ff:ff  inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0      valid_lft forever preferred_lft forever


# 方法二:修改docker配置文件[root@docker02 ~]# vim /etc/docker/daemon.json{ "bip": "192.168.10.1/24",   #加上这一行,json格式的。 "registry-mirrors": ["https://pgz00k39.mirror.aliyuncs.com"]}[root@docker01 ~]# systemctl daemon-reload[root@docker01 ~]# systemctl restart docker[root@docker01 ~]# ifconfig   //看一下,已变为192.168.10.1docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500      inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255       [root@docker01 ~]# docker run -it busybox /bin/sh/ # ifconfigeth0     Link encap:Ethernet HWaddr 02:42:C0:A8:0A:02          inet addr:192.168.10.2 Bcast:192.168.10.255 Mask:255.255.255.0


共享主机模式HOST

相当于VM里面的仅主机,是与宿主机共享网卡。namespace不做网卡隔离。

--network=host。性能最高。

共享主机模式HOST.png

[root@docker01 ~]# docker run -it --network=host busybox /bin/sh看下,与宿主机一毛一样;再起一个也是一样。所有宿主机网卡都被共享进来,起多少容器IP都一样,所以用的少。

效果.png

容器模式Container

与另一运行的容器共享网络,几个容器都是同样网卡。

K8s用的就是这个模式 --network=container:containerID

容器模式Container.png

无网络模式None

不为容器配置任何网络功能,就你起的容器没有网。没啥卵用。

--net=none

无网络模式None.png

[root@docker01 ~]# docker run -it --network=none busybox /bin/sh (仅有本机回环地址)/ # ifconfiglo       Link encap:Local Loopback          inet addr:127.0.0.1 Mask:255.0.0.0        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:1000        RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

自定义网络模式

先创建网络模式,启动容器的时候指定即可。

自定义网络模式.png

相当于划分网段

比如我有3个项目,每个项目20台服务器。前面20台一个网段可以互通,再20台在另一个网段,不能与前面的互通。

## 创建网络模式的语法(可任选上面4种除了none以外的模式)docker network create -d <mode> --subnet <CIDR> --gateway <网关> <自定义网路名称>-d <mode> 指定模式--subnet <CIDR> :子网

## 比如先创建个桥接王者农药项目所有机器的网络[root@docker01 ~]# docker network create -d bridge --subnet 172.16.10.0/24 --gateway 172.16.10.1 wzry_net569523ef0a1a8297e5a78c907959b5d4b0a2f31af1635ceab33373040a977abf[root@docker01 ~]# docker network lsNETWORK ID     NAME           DRIVER   SCOPE2247958d209d   bridge         bridge   localfd205709680c   harbor_harbor   bridge   locald525d5850de6   host           host     local62adafdbdc95   none           null     local569523ef0a1a   wzry_net       bridge   local  #这个

[root@docker01 ~]# docker run -it --network=wzry_net busybox /bin/sh/ # ifconfigeth0     Link encap:Ethernet HWaddr 02:42:AC:10:0A:02          inet addr:172.16.10.2 Bcast:172.16.10.255 Mask:255.255.255.0...

[root@docker01 ~]# docker run -it --network=wzry_net busybox /bin/sh/ # ifconfigeth0     Link encap:Ethernet HWaddr 02:42:AC:10:0A:03          inet addr:172.16.10.3 Bcast:172.16.10.255 Mask:255.255.255.0


## 其他项目:比如再创建个桥接的lol项目[root@docker01 ~]# docker network create -d bridge --subnet 172.16.11.0/24 --gateway 172.16.11.1 lol_net

[root@docker01 ~]# docker run -it --network=lol_net busybox /bin/sh/ # ifconfigeth0     Link encap:Ethernet HWaddr 02:42:AC:10:0B:02          inet addr:172.16.11.2 Bcast:172.16.11.255 Mask:255.255.255.0[root@docker01 ~]# docker run -it --network=lol_net busybox /bin/sh/ # ifconfigeth0     Link encap:Ethernet HWaddr 02:42:AC:10:0B:02          inet addr:172.16.11.3 Bcast:172.16.11.255 Mask:255.255.255.0/ # ifconfig ping 172.16.11.2 通/ # ifconfig ping 172.16.10.2 不通## 通信测试:相同网络模式之间的容器可以互通


选择订阅-通过 Docker 订阅在协作、安全性和支持之间找到完美的平衡!
在线客服
联系方式

热线电话

18221674630

上班时间

周一到周五

公司电话

18221674630

二维码
线
获取免费体验资格

提交后,我们将在3个小时内与您联系