看我的文章准没错,关于管理Docker容器资源的一些操作

 3.3 管理容器的资源

           在一台Docker宿主机上可以同时启动多个容器。在默认情况下,Docker没有限制其中
运行的容器使用硬件资源。而在实际环境中,容器的负载过高会占用宿主机的大量资源。这
里的资源主要是指宿主机的CPU、内存和I/0带宽这三个方面。

3.3.1 什么是Linux CGroup

              由于Docker构建在Linux的基础之上,因此从Linux底层来看,Docker是利用Linux
Control Group(简称Linux CGroup)来实现对资源使用的控制。因此,要掌握 Docker 容器
的资源管理有必要先了解一下什么是Linux CGroup
注释:LinuxCGroup是Linux中的一些进程,通过这些进程可以限制应用对资源的使用。
并且,通过LiunxCGroup可以对系统资源做精细化。例如可以实现对每个容器使用的CPU比率进行限制。
LinuxCGroup主要提供了以下功能。
  • Resourcelimitation;限制资源的使用,例如,使用CPU及内存的上限
  • Prioritization:应用的优先级控制,例如,控制任务的调度。
  • Accounting:应用的审计和统计,例如,实现应用的计费。
  • Control:实现对应用的控制,例如,应用的挂起、恢复和执行等。
要使用 Linux CGroup,则需要先通过执行以下步骤确定 Linux 的内核是否启用了
Linux CGroup。
确定操作系统的发行版本
[root@pp ~]# uname -r
3.10.0-957.el7.x86_64
根据操作系统的发行版本,可以确定是否启用了Linux CGroup。图3-14中的
CGROUP参数的值是“y”,表示已经启动 Linux CGroup。
这里给大家演示一下如何 通过Linux CGroup 限制应用使用I/O带宽
为了更好地观察结果,首先安装iotop工具
注释:iotop工具用来监视磁盘1/0使用情况,包括pid、user、1/0、进程等消息
以下演示如何使用LinuxCGroup 限制应用使用I/O带宽
(1)使用Linux的“dd”命令从磁盘持续读写数据。
[root@pp ~]# dd if=/dev/sda of=/dev/null
(2)查看设备“/dev/sda”的信息。从图3-23 中可以看到,设备“/dev/sda”的设
备号是“disk8,0”
(3)使用LinuxCGroup 限制I/O对设备“/dev/sda”的读取速率。
[root@pp ~]# mkdir /sys/fs/cgroup/blkio/io
[root@pp ~]# cd /sys/fs/cgroup/blkio/io/
[root@pp io]# echo '8:0 1048576' > blkio.throttle.read_bps_device
通过这样,I/O对该设备的读取速率被限制在1MB/s之内了。
(4)将“dd”命令的进程ID(21681)写入tasks 文件
[root@pp io]# echo 76100 > tasks

3.3.2 [实战]Docker对 CPU的使用

          Docker 的容器可以被看成是一个虚拟机,或者一个运行在 Linux之上的进程。Docker 的引擎可以通过参数-c或者--cpu-shares,为每一个容器分配一个“CPU 使用率的相对权 重”。该权重与实际的处理速度无关。每个容器默认有1024个CPU配额的权重。
下面通过具体步骤来演示。这里基于CentS的基础镜像安装压力测试工具stress来进行
测试。
(1)创建一个 Dockerfile 文件,输入以下内容
(2)执行“docker build”命令将其编译成镜像,镜像的名称是mycentos。
1 [root@pp ]# docker build ‐t mycentos .
(3)使用mycentos镜像创建两个容器。注意:第1个容器占用CPU的权重是默认的
1024;而第2个容器占用CPU的权重是512。
1 [root@pp ]# docker run ‐it mycentos ‐‐cpu 4
2 [root@pp ]# docker run ‐it ‐c 512 mycentos ‐‐cpu 4
其中,参数--cpu4用于指定压力测试工具stress模拟创建4个CPU。
   (4)通过“docker stats”命令观察这两个容器占用CPU的情况可以看到容器
占用的CPU比容器占用的CPU多近一倍
(5)如果要变更一个正在运行的容器的配额,则需要先使用“docker inspect CONTAINER”命令获取容器ID
[root@pp ~]# docker inspect 9020348d9b01 | grep Id
(6)使用“systemctl set-property”命令将容器 1ce2265f7b94 占用 CPU 的权重设
置为
1 [root@pp ~]# systemctl set‐property \
2 > docker‐9020348d9b01c7e35070270aad2648affa10dcd61eedc0bcf305d78361556062 \
3 > CPUShares=1024
4 [root@pp ~]#
(7)通过“docker stats”命令观察这两个容器的 CPU 占用率,会发现两个容器基本
平均地占用了CPU,然后就可以看到了
3.3.3有关于Docker 1/0 管理的相关参数
3.4 管理Docker 容器中的数据
      在生产环境中使用 Docker,一方面,需要对数据进行保存或者在多个容器之间进行数
据共享;另一方面,在 Docker 的容器被删除后,并不会保留容器的状态信息。
        那么如何实现信息的持久化呢?这必然涉及容器的数据管理。

3.41在Docker容器中实现数据管理的两种方式

         在Docker容器中实现数据管理(或者说实现数据的持久化)主要有以下两种方式
         1. 数据卷(Data Volumes )
         数据卷本质上是一个挂载目录,类似使用Linux的mount命令挂载的目录。数据卷可以
供容器使用,并且可以在不同的容器之间共享和重用数据卷。对数据卷的修改会立即生效。
数据卷与容器彼此独立,对数据卷的更新不会影响镜像。
注释:即使容器被删除,数据卷默认也会一直存在,直到数据卷被删除为止
在Docker 中可以使用-mount和-v 两种方式给容器挂载数据卷。
2. 数据卷容器(Data Volume Containers)
         数据卷容器是一种特殊的容器,用来维护数据卷。它可以在多个容器之间共享数据信
息。利用数据卷容器可以很方便地完成数据迁移。
下图展示了数据卷、数据卷容器和容器之间的关系
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值