首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第一章:容器
1. 虚拟化和容器技术
2. 容器化的基础
3. Docker架构
4. Docker安装
5. Docker相关进程
第二章:Docker镜像
1. Docker镜像
2. Docker 镜像相关操作
3. docker commit
4. image save & load
5. container export & import
第三章:Dockerfile
语法
指令
多阶段构建
Examples
第四章:Network(网络)
常见的容器之间通信方式
Docker网络模型
案例
第五章:Volumes(卷)
Docker 卷结构
volumes案例
第六章:Registry
Docker Registry 分类
docker-registry 安装使用
Harbor 安装使用
第七章:Cgroups
CPU 资源限制
Mem 资源限制
I/O 资源限制
当前位置:
首页>>
技术小册>>
深入学习Docker
小册名称:深入学习Docker
2.1. Chroot 如果需要在一个宿主机上运行多个容器,且容器之间相互个离,那么第一个就需要系统库文件的依赖,对于一个容器而言,需要将其需要的系统文件单独复制出来一份,放到指定目录,并且需要让进程认为这就是根目录,而不是去调用宿主机系统上的库文件。Chroot就是一个切换根目录的方式。 2.2. NameSpaces 为了让多个容器以沙盒的方式在宿主机上运行,就需要提前定义好各个容器能看到的边界。由于各个容器都是直接运行在宿主机系统上,因此需要内核对各个容器的上下文进行修改,让他们看上去是一个独立的操作系统。比如,指定PID为1的进程,指定网卡设备,指定文件系统挂载,指定用户等等。 Linux操作系统内核从底层实现了为各个进程创建独立用户空间的功能,不同用户空间似于一个个独立的虚拟机系统,用户空间内部进程不能感知到其它用户空间中的进程状态。内核提供了六种Namespaces: ![](/uploads/images/20230731/d0174c44937bfac58373c83681d48f18.png) 2.3. Cgroups Namespaceses通过障眼法实现了用户空间的隔离,但是没办法对硬件资源进行限制,当一个容器进行CPU密集型操作时,会消耗掉整个宿主机的CPU资源,进而影响了其它容器的正常运行。 因此在Namespaceses之上,还需要对各个容器实现硬件资源限制,比如CPU,Memory,diskio等等。 Cgroups技术针对进程而言的,在centos7系统上,可以通过以下方式来实现对进程的资源限制: ```bash [root@centos-82 ~]# while :;do :;done & [1] 2136 [root@centos-82 ~]# pidstat -u -p 2136 2 ## 未加cgroups限制下,跑满单个CPU核心 11:09:54 AM UID PID %usr %system %guest %CPU CPU Command 11:09:56 AM 0 2136 99.50 0.00 0.00 99.50 4 bash 11:09:58 AM 0 2136 100.00 0.00 0.00 100.00 4 bash 11:10:00 AM 0 2136 100.00 0.00 0.00 100.00 4 bash [root@centos-82 ~]# mount -t cgroup ## 查看当前cgroups路径 cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd) cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu) cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio) cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer) cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event) cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) [root@centos-82 ~]# mkdir /sys/fs/cgroup/cpu/loop [root@centos-82 ~]# cat /sys/fs/cgroup/cpu/loop/cpu.cfs_quota_us -1 [root@centos-82 ~]# cat /sys/fs/cgroup/cpu/loop/cpu.cfs_period_us 100000 [root@centos-82 ~]# echo 10000 >/sys/fs/cgroup/cpu/loop/cpu.cfs_quota_us ## CPU时间片限制在10% [root@centos-82 ~]# echo 2136 > /sys/fs/cgroup/cpu/loop/tasks ## 指定限制的进程PID [root@centos-82 ~]# pidstat -u -p 2136 2 Linux 3.10.0-862.el7.x86_64 (centos-82) 03/02/2019 _x86_64_ (8 CPU) 11:16:37 AM UID PID %usr %system %guest %CPU CPU Command 11:16:39 AM 0 2136 10.50 0.00 0.00 10.50 4 bash 11:16:41 AM 0 2136 10.00 0.00 0.00 10.00 4 bash 11:16:43 AM 0 2136 9.50 0.00 0.00 9.50 4 bash 11:16:45 AM 0 2136 9.95 0.00 0.00 9.95 4 bash ```
上一篇:
1. 虚拟化和容器技术
下一篇:
3. Docker架构
该分类下的相关小册推荐:
Docker入门与实战
Docker零基础到实战
Docker零基础到实战应用