docker 4种网络模式
概况
host模式
使用--net=host
指定。容器使用主机的IP地址和端口来进行通信,这样可以达到和主
机一样的网络性能和配置,但是也存在安全风险。使用Host网络模式时,容器不会创建自己的网络命名
空间,也不会为容器单独分配IP地址,而是直接使用主机的IP地址和端口,因此容器之间的网络隔离会
被打破,容器可以直接访问主机上所有的端口和服务,也可以被主机上的其他设备访问到。Host网络模
式一般用于需要直接访问主机资源的场景,例如主机上运行的服务需要直接访问容器中的服务。
none模式
使用--net=none
指定。None网络模式就是不给容器分配任何网络资源,也就是说,
容器不会创建虚拟网卡、IP地址和路由等网络资源,容器之间无法直接通信,也无法与主机和外部网络
进行通信。使用None网络模式时,容器只能使用本地文件系统和进程空间等资源。None网络模式一
般用于一些特殊场景,例如需要在容器中进行一些本地操作,但又不需要使用网络资源的情况下,或者需
要创建一个完全隔离的容器时。
bridge模式
使用--net=bridge指定,这是·Docker·默认的网络模式。在Docker中,Bridge网络模式就像是一座桥, 它通过一个虚拟网桥来连接多个容器。这个虚拟网桥就像是一座桥梁,把连接到它上面的容器连接起来, 这样它们就可以相互通信了。与外部网络进行通信时,虚拟网桥通过物理网卡连接到主机上的网络。
container模式
Docker网络container模式是指,创建新容器的时候,通过--net container
参数,指定其和已经存在的某个容器共享一个·Network-Namespace。如下图所示,右方黄色新创建的
container,其网卡共享左边容器。因此就不会拥有自已独立的·IP,而是共享左边容器的·IP
172.17.0.2.端口范围等网络资源,两个容器的进程通过·10?网卡设备通信。
实验
## none 无ip 需要自己配
$ docker run -itd --name none --net=none --privileged=true rockylinux:8.8 bash
## host 与主机共享ip
$ docker run -itd --name host --net=host --privileged=true rockylinux:8.8 bash
## 跟 名称为 none 容器共享ip
$ docker run --name container --net=container:none -it --privileged=true rockylinux:8.8 bash
## 默认就是 -net=bridge
$ docker run --name bridgee -it --privileged=true rockylinux:8.8 bash
拓展
-privileged=true·#允许开启特权功能,使用这个参数会让Docker容器拥有更高的权限,可以 访问宿主机的所有资源。类比于一个人,如果你是普通的游客,你只能在景区指定的区域内走动,但是如 果你是景区的管理员,那么你就可以随意进出景区的各个区域,进行各种操作。
在Docker中,运行特权容器的场景通常是需要执行一些底层操作,例如管理宿主机上的硬件设备、 加载内核模块、访问系统的底层资源等。因此,如果需要在容器中进行这些底层操作,就需要使用-- privileged=true参数。不过,需要注意的是,这种高权限操作也可能存在安全风险,因此需要仔细考虑 和控制风险。 特权模式通常用于需要访问宿主机底层设备或进行特殊操作的应用场景,例如: 1)需要在容器中执行内核模块加载或卸载操作; 2)需要访问系统中的设备节点,例如/dev和/sys目录下的文件; 3)需要访问系统的硬件资源,例如CPU、内存、网络和存储设备等。