当前位置: 首页 > article >正文

C06S02-Docker网络和资源限制

一、Docker网络模式

1. 桥接模式

Docker的默认网络模式,工作在第二层,也就是数据链路层。

  1. 启动Docker的时候会在宿主机上创建一个虚拟的网桥,工作方式类似于交换机。
  2. 创建容器的时候,会分配一个和网桥相同网段的IP地址给容器使用,网桥IP地址作为这个网段的网关。容器被删除时,IP地址会被回收。
  3. 容器运行时,会生成一对Veth Pair虚拟网络接口设备。一端连在网桥上,一端连在容器上,从而实现容器和主机之间的通信。
  4. 容器之间通过IP地址直接通信,不同的容器在同一个网段,通过Veth Piar连接在同一个网桥上。

2. Host模式

容器和宿主机共享一个Network命名空间,容器不会生成虚拟的网卡、也不会配置IP地址,而是与宿主机共享网络端口和IP地址。

配置Host模式的基本命令如下。

docker run -itd --network host 镜像名称[:镜像标签] 
  • –network:用于配置容器的网络模式,这里是host模式。

3. Container模式

所有容器共享一个Network命名空间,新建的容器不会创建自己的虚拟网卡和IP地址,而是和已有的容器共享网络端口和IP地址,除网络外,其他资源也还是互相隔离的。

配置Container模式的基本命令如下。

docker run -itd --network container 镜像名称[:镜像标签] 

4. None模式

容器有单独的命名空间,但是没有虚拟网卡、IP地址等网络配置,只有一个回环地址。也就是说,不能访问外部网络,也不能被外部网络访问,这种模式常用于测试。

配置Container模式的基本命令如下。

docker run -itd --network none 镜像名称[:镜像标签] 

5. 自定义模式

用户可以自定义创建一个虚拟网桥,指定网桥的网段范围。只有先创建了自定义网桥,才能够给容器分配指定的IP地址。

配置自定义模式的基本流程如下。

# 先自定义网络,设置IP范围
docker network create --subnet=子网范围 --opt "com.docker.network.bridge.name"="网卡名称" 网络名称

# 在创建并运行容器的同时,指定容器的IP
docker run -itd --network 网络名称 --ip 自定义IP地址 镜像名称[:镜像标签] 
  • –subnet:用于设置自定义网络的子网范围,采用CIDR写法。
  • –opt:用于设置自定义网络的特定配置。这里的com.docker.network.bridge.name是用于设置自定义网络的虚拟网卡名称。如果不设置,Docker会自动生成一个。

二、Docker资源限制

1. Cgroups概述

Cgroups是Linux内核实现资源限制的一种机制,而Docker正是通过Cgroups来进行资源的限制,主要限制包括CPU资源限制、内存资源限制、磁盘资源限制,其中最为常用的是CPU和内存的资源限制。

2. CPU资源限制

2.1 设置CPU使用率

Linux通过CFS (Completely Fair Scheduler, 完全公平调度器)来调度各个进程对CPU的使用,默认的CPU调度时间是100000微秒(100毫秒)。CFS的调度时间范围是1毫秒至1秒,也就是1000微秒至1000000微秒,CPU的使用时间不得小于1000微秒。

  • –cpu-period:设置CFS调度CPU的时间,单位是微秒,范围是1000—1000000。
  • –cpu-quota:设置容器对CPU的使用时间,单位是微秒,常用限制配置。数值不小于1000,不大于调度时间。
docker run -itd --name 容器名称 --cpu-quota 使用时间 镜像名称[:镜像标签]

2.2 设置CPU资源权重

通过–cpu-share来设置容器对CPU的使用权重,通常是1024的倍数,默认值是1024。只有多个容器同时设置了权重才能够生效。

docker run -itd --name 容器名称 --cpu-share 使用权重 镜像名称[:镜像标签]

2.3 设置指定CPU核

通过–cpuset-cpus来设置容器所使用的CPU核,CPU的核索引从0开始,指定多个核则用逗号分隔。

docker run -itd --name 容器名称 --cpuset-cpus 核索引 镜像名称[:镜像标签]

3. 内存资源限制

3.1 设置容器内存大小

通过–memory来设置容器的内存大小,数值后需要带单位,比如M表示MB、G表示GB。

docker run -itd --name 容器名称 --memory 内存大小 镜像名称[:镜像标签]

3.2 设置容器交换空间大小

通过–memory-swap来设置容器的交换空间大小,要和–memory一起使用,并且设置的数值大小要包括容器的内存大小。比如–memory 512M --memory-swap 1G的含义是:容器的物理内存是512MB、可使用的交换空间是1GB-512MB=512MB。

docker run -itd --name 容器名称 --memory 内存大小 --memory-swap 交换空间大小 镜像名称[:镜像标签]
  • 如果两个设置的值相同,则表示容器无法使用交换空间。
  • —memory-swap的值设置为-1表示交换空间大小不受限,宿主机有多大交换空间,容器就可以使用多大的交换空间。

4. 磁盘资源限制

通常情况下,不会限制容器对磁盘资源的使用。通过–device-read-bps和–device-write-bps来设置对容器的读数据、写数据的速度。

docker run -itd --name 容器名称 -device-read-bps 磁盘设备:速度大小 --device-write-bps 磁盘设备:速度大小 镜像名称[:镜像标签]

http://www.kler.cn/a/538138.html

相关文章:

  • 《qt easy3d中添加孔洞填充》
  • TAPEX:通过神经SQL执行器学习的表格预训练
  • 如何在Vscode中接入Deepseek
  • DeepSeek介绍,以及本地部署和API使用
  • 如何在 Linux 中管理自定义脚本:将 ~/bin 目录添加到 $PATH
  • nodejs - vue 视频切片上传,本地正常,线上环境导致磁盘爆满bug
  • 3D gpr仿真
  • 使用 SDKMAN! 在 Mac(包括 ARM 架构的 M1/M2 芯片)上安装 Java 8
  • 深度解析DeepSeek模型系列:从轻量级到超大规模(附DeepSeek硬件配置清单)
  • 【C++语法】【STL】“for ( auto c : str )”类型的循环
  • FreeRtos实时系统: 九.FreeRTOS的时间管理
  • 【学Rust写CAD】5 三维转换矩阵解析及应用示例
  • 【ARM】MDK烧录配置文件无权限访问
  • 12.13 LangChain 运行时引擎解析:AgentExecutor vs PlanAndExecute vs AutoGPT
  • 三天急速通关MyBatis
  • c语言样式主题 清爽风格 代码色彩 keil风格 适合单片机开发GD32 STM32等 cursor或者vscode 的settings.json文件
  • Python第三方库复制到另一台电脑保持安装环境一致
  • 【RK3588嵌入式图形编程】-SDL2-创建应用事件循环
  • 【DeepSeek-01】无需 Docker,千元级电脑本地部署 Ollama + DeepSeek-R1:14b + Chatbox
  • stm32蓝牙模块
  • 【Pytorch实战教程】让数据飞轮转起来:PyTorch Dataset与Dataloader深度指南
  • Linux网卡配置方法
  • 02为什么 OD门和 OC门输出必须加上拉电阻?
  • 机器学习-关于线性回归的表示方式和矩阵的基本运算规则
  • 【STM32F1】一种使用通用定时器实现各个通道独立输出不同指定数量脉冲的方法
  • 掌握内容中台与人工智能技术的新闻和应用场景分析