容器的namespace和cgroup

目录

NameSpace

 cgroup


Namespace 做隔离,Cgroups 做限制,rootfs 做文件系统 

NameSpace

容器只不过是一种特殊的进程。

在容器里面,他们会自认为自己时一个单独的系统。

容器的namespace和cgroup_第1张图片

他的cmd启动命令的pid为1,这只不过是容器技术的”障眼法“罢了 。

我们再来看看宿主机中容器的pid,

这里我们可以看出,docker容器就是宿主机的一个进程,到这里也就是docker容器的namespace了,在容器内部他是一个看起来完全隔离的环境,但是在宿主机中看来她只是一个进程,当然,容器本身是意识不到的

 cgroup

前面说了容器只不过是宿主机的一个进程,也是和其他进程存在公平竞争的关系的,简单来说,就是容器进程所占用的资源会被其他的进程所占用,或者容器进程会占用其他进程的资源。这对于沙盒技术的容器来说是不合适的,所以必须有一个东西可以限制容器的资源被占用或者占用其他资源,这时从cgroup出场了。起作用就是为了限制容器的namespace的资源,不能这么说,应该说是限制linux系统中所有进程的资源

查看cgroup文件夹

容器的namespace和cgroup_第2张图片

我们可以看出cgroup可以限制很多的系统资源,像cpu、memory、blkio等,那我们进入cpu中来看一下。 

容器的namespace和cgroup_第3张图片

我们会发现一个docker的文件夹,这个文件夹就是用来限制我们的容器资源的,进入docker容器,(这里说一下只有当我们的容器运行时,才会有docker这个文件夹,否则会没有)

 容器的namespace和cgroup_第4张图片

 我们可以看见一长串数字的文件夹,这就是容器的id了,也就是每创建一个容器就会有一个文件夹,用来控制容器所占用的资源,这里我就启动了一个ubuntu的容器,所以只有一个,进入文件夹看看

容器的namespace和cgroup_第5张图片

其中 cpu.cfs_period_us和cpu.cfs_quota_us也就是控制我们容器的资源的重要的两个文件

我们也可以更改这两个文件控制容器所占用的资源。

你可能感兴趣的:(docker,java,linux)