Docker高级应用-限制容器的cpu和内存

一、为什么要用docker限制容器的cpu和内存

1. 资源隔离与公平分配

  • 防止资源争用:在多容器环境中,限制 CPU 和内存可以避免某个容器占用过多资源,影响其他容器的运行。

  • 确保公平性:通过限制资源,确保每个容器都能获得所需的计算能力,避免资源被少数容器独占。

2. 提高系统稳定性

  • 防止内存泄漏:限制内存可以避免容器因内存泄漏耗尽主机内存,导致系统崩溃。

  • 避免 CPU 过载:限制 CPU 使用可以防止容器过度占用 CPU,影响主机和其他容器的性能。

3. 优化性能

  • 资源分配优化:合理分配资源可以提升整体性能,确保关键应用获得足够资源。

  • 避免性能波动:限制资源可以减少因资源争用导致的性能波动,保证应用稳定运行。

4. 成本控制

  • 避免资源浪费:限制资源可以防止过度分配,节省成本。

  • 支持按需分配:根据应用需求动态调整资源,避免不必要的开支。

5. 安全性增强

  • 防止资源耗尽攻击:限制资源可以降低容器因恶意行为耗尽主机资源的风险。

  • 增强隔离性:资源限制增强了容器间的隔离性,减少安全风险。

6. 便于监控和管理

  • 资源使用透明化:限制资源后,更容易监控容器的资源使用情况,便于管理和优化。

  • 简化故障排查:资源限制有助于快速定位和解决资源相关的问题。

总结

限制容器的 CPU 和内存资源有助于提升系统的稳定性、性能和安全性,同时优化资源使用和成本控制,便于监控和管理。

二、实战部署

[root@cjr ~]# docker run -itd --name docker20 --cpuset-cpus=0,1 --cpu-shares 512 centos
354cf7ddef612c414c92000d6204930d093098b933d1e4d0a390bb6dd7ce33dc
[root@cjr ~]# docker run -itd --name docker10 --cpuset-cpus=0,1 --cpu-shares 1024 centos
175947e86b5114d98ec9b6fe3ba28ce6d63eb598bc85ace3a1fc3ef561e7edb0
You have new mail in /var/spool/mail/root
[root@cjr ~]# docker cp stress docker10:/bin
Successfully copied 29.7kB to docker10:/usr/bin
You have new mail in /var/spool/mail/root
[root@cjr ~]# docker cp stress docker20:/bin
Successfully copied 29.7kB to docker20:/usr/bin
[root@cjr ~]# docker exec -it docker10 bash

需要虚拟机在开两个进程用于启动容器和查看虚拟机使用情况

可以看出来在设置了两个容器cpu的权重的时候,权重高位的cpu占比高

你提供的命令涉及多个 Docker 操作,下面是对每个命令的详细解析:

### 1. **创建容器 `docker20`**
```bash
docker run -itd --name docker20 --cpuset-cpus=0,1 --cpu-shares 512 centos
```
- **`docker run`**:创建并启动一个新容器。
- **`-itd`**:
  - `-i`:保持标准输入(STDIN)打开。
  - `-t`:分配一个伪终端(TTY)。
  - `-d`:在后台运行容器(detached 模式)。
- **`--name docker20`**:将容器命名为 `docker20`。
- **`--cpuset-cpus=0,1`**:限制容器只能使用 CPU 核心 0 和 1。
- **`--cpu-shares 512`**:设置容器的 CPU 份额为 512(默认是 1024,512 表示相对较少的 CPU 资源)。
- **`centos`**:使用 `centos` 镜像创建容器。

### 2. **创建容器 `docker10`**
```bash
docker run -itd --name docker10 --cpuset-cpus=0,1 --cpu-shares 1024 centos
```
- 与上一个命令类似,但有以下区别:
  - 容器命名为 `docker10`。
  - `--cpu-shares 1024`:设置容器的 CPU 份额为 1024(默认值,表示相对较多的 CPU 资源)。

### 3. **将 `stress` 工具复制到容器 `docker10`**
```bash
docker cp stress docker10:/bin
```
- **`docker cp`**:将文件或目录从主机复制到容器中。
- **`stress`**:主机上的 `stress` 工具文件。
- **`docker10:/bin`**:将 `stress` 复制到容器 `docker10` 的 `/bin` 目录下。

### 4. **将 `stress` 工具复制到容器 `docker20`**
```bash
docker cp stress docker20:/bin
```
- 与上一个命令类似,但目标容器是 `docker20`。

### 5. **进入容器 `docker10` 的交互式终端**
```bash
docker exec -it docker10 bash
```
- **`docker exec`**:在运行的容器中执行命令。
- **`-it`**:
  - `-i`:保持标准输入(STDIN)打开。
  - `-t`:分配一个伪终端(TTY)。
- **`docker10`**:目标容器名称。
- **`bash`**:在容器中启动 `bash` shell,进入交互式终端。

### 总结
这些命令完成了以下操作:
1. 创建了两个容器 `docker20` 和 `docker10`,分别限制了 CPU 核心和份额。
2. 将 `stress` 工具复制到两个容器中。
3. 进入 `docker10` 容器的交互式终端,以便进一步操作。

通过这些命令,你可以在容器中运行 `stress` 工具,测试 CPU 资源分配的效果。

内存管理:

[root@cjr ~]# docker run -it --name docker30 -m 512m centos
[root@244dbb05f8ee /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes
536870912
[root@cjr ~]# docker run -it --name docker40 -m 512m --cpu-shares=512 --cpuset-cpus=0 centos

以上命令是结合cpu和内存进行一个使用,大家可以根据实际环境中进行一个部署

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云原生的爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值