0


Docker网络配置&网络模式

前言

Docker 的网络模式是一种定义容器如何在网络中通信的方式。Docker 提供了多种网络模式,每种模式都适用于不同的使用场景

一.网络相关概念

1.子网掩码

互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。

IP地址在设计时就考虑到地址分配的层次特点,将每个IP地址都分割成网络号和主机号两部分,以便于

IP地址的寻址操作。

子网掩码是“255.255.255.0”的网络:

最后面一个数字可以在0~255范围内任意变化,因此可以提供256个IP地址。但是实际可用的IP地

址数量是256-2,即254个,因为主机号不能全是“0”或全是“1”。

子网掩码是“255.255.0.0”的网络:
后面两个数字可以在0~255范围内任意变化,可以提供255²个IP地址。但是实际可用的IP地址数量
是255²-2,即65023个。

IP地址的子网掩码设置不是任意的。如果将子网掩码设置过大,也就是说子网范围扩大,那么,根

据子网寻径规则,很可能发往和本地主机不在同一子网内的目标主机的数据,会因为错误的判断而

认为目标主机是在同一子网内,那么,数据包将在本子网内循环,直到超时并抛弃,使数据不能正

确到达目标主机,导致网络传输错误;如果将子网掩码设置得过小,那么就会将本来属于同一子网

内的机器之间的通信当做是跨子网传输,数据包都交给缺省网关处理,这样势必增加缺省网关的负

担,造成网络效率下降。

因此,子网掩码应该根据网络的规模进行设置。如果一个网络的规模不超过254台电脑,采用

“255.255.255.0”作为子网掩码就可以了,现在大多数局域网都不会超过这个数字,因此

“255.255.255.0”是最常用的IP地址子网掩码;假如在一所大学具有1500多台电脑,这种规模的局

域网可以使用“255.255.0.0”。

2.网关

网关实质上是一个网络通向其他网络的IP地址。

3.规则

计算机的IP地址由两部分组成,一部分为网络标识,一部分为主机标识,同一网段内的计算机网络部分

相同,主机部分不同同时重复出现。

路由器连接不同网段,负责不同网段之间的数据转发,交换机连接的是同一网段的计算机。通过设置网

络地址和主机地址,在互相连接的整个网络中保证每台主机的IP地址不会互相重叠,即IP地址具有了唯

一性。

二.网络模式

在学习Docker网络配置之前我们要先了解什么是网络模式
模式描述Bridge(桥接)默认模式,用于在同一主机上的容器通信。每个容器有唯一的 IP 地址,可以通过容器名或容器 ID 进行通信。容器与主机之间使用 NAT。Host(主机)容器共享主机的网络命名空间,直接使用主机的网络接口。性能较好,但容器和主机之间可能出现端口冲突。None(无网络)容器没有网络接口,只能通过其他网络连接。用户可以自行配置容器的网络。Overlay用于跨多个 Docker 守护进程的容器通信,例如在 Docker Swarm 模式下。创建 overlay 网络,容器加入该网络即可。Macvlan允许容器直接使用物理网络的 MAC 地址,使容器看起来像是物理设备。配置 Macvlan 网络,容器加入该网络。Custom Bridge用户可以创建自定义的桥接网络,适用于多容器应用。创建自定义桥接网络,容器加入该网络。CNI(Container Network Interface)开放的插件化网络接口,允许使用第三方网络插件。Kubernetes 中广泛使用的网络模式,支持多种网络实现,例如 Calico、Flannel 等。Sidecar使用额外的容器(sidecar)来处理网络通信或其他功能。主容器与 sidecar 共享网络命名空间,通过 localhost 进行通信。Bridge to Host在用户定义的网络命名空间中,容器连接到主机网络。在 Linux 中,容器直接连接到主机网络命名空间,不再进行网络隔离。Network Namespace不是一种独立的模式,而是一种容器网络隔离的基础。每个容器都有自己的网络命名空间,可以配置自己的网络接口、路由等,实现网络隔离。

1.网桥模式(bridge)

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连

接到这个虚拟网桥上。

虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。

而网桥模式是docker默认的网络模式,不写-net参数,就是bridge(网桥)模式

打开容器

docker run -itd --net=bridge --name cname iname

查看容器网络

ip addr
ifconfig

在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名

为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入

到docker0网桥中

当我们直接创建一个容器将tomcat默认的8080端口映射8081再去查看它的网络模式

docker run -itd \
--name y1 \
-p 8081 \
tomcat:8.5.20

** 查看bridge信息**

docker inspect bridge

我们可以看到我们利用命令可以查看详细的bridge信息以及关联的ip

当然,在我们映射端口时可以同时映射多个端口

例:docker run -itd --name bridge05 -p 8082:8080 -p 8083:8080 spring:1.0

小结:

每个容器有自己独立的ip

如果外部访问需要设置端口映射

默认模式就为网桥模式

2.主机模式(Host)

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是

和宿主机共用一个Network Namespace。

容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

在我们创建容器时不需要去做端口映射,且容器会直接占用当前使用端口,无法再进行多端口映射

三.Docker自定义网络配置

1.创建自定义网络

docker network create --subnet=172.20.0.0/16 mynet

查看当前所有网络

docker network ls

2.创建指定自定义网络容器

docker run -it \
--name t1 \
-p 8080:8080 \
-v /soft:/usr/local/tomcat/webapps \
--net mynet \
--ip 172.20.0.100 \
tomcat:8.5.20

3.创建并指定Mysql容器网络配置

docker run \
--name m1 \
-v /mysql/conf/my.cnf:/etc/my.cnf \
-v /mysql/data:/var/lib/mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
--net mynet \
--ip 172.20.0.200 \
-d mysql/mysql-server:5.7

4.创建Mysql远程访问用户

grant all on *.* to YU@'%' identified by '123456';

小结:当我们为mysql指定网络配置后,我们在部署项目时就不需要去指定我们的IP,可以直接使用当前Mysql容器名+mysql端口进行配置,但是前提是当前MySQL必须要和项目在同一个网络下

标签: docker 容器 运维

本文转载自: https://blog.csdn.net/weixin_73320743/article/details/135640537
版权归原作者 ChatYU. 所有, 如有侵权,请联系我们删除。

“Docker网络配置&网络模式”的评论:

还没有评论