cgroup和namespace是实现容器底层的重要技术

cgroup:实现资源限制

namespace:实现资源隔离

1.cgroup:control group

Linux操作系统通过cgroup可以设置进程使用CPU,内存和IO资源使用的限额。我们之前学习的通过-m,--memory-swap,-c,--blkio-weight就是通过cgroup实现的。那么cgroup到底是什么样子的呢?

可以在/sys/fs/cgroup里面找到,例如:

我们运行一个容器,我们设置的cpu的权重是700

我们进入/sys/fs/cgroup/cpu/docker目录下的相应的容器的ID的目录里面,看cpu.shares,可以看到我们设置的权重是700

同样的我们进入/sys/fs/cgroup/memory/docker/中大概是memory.limit_in_bytes这个文件是容器内存的大小

同样的我们进入/sys/fs/cgroup/blkio/docker/中,blkio.weight这个文件是Block IO的权重文件

我们可以在以上的文件中,查看或者更改容器资源的大小

2.namespace

            我们运行的每一个容器,都像是一个新的操作系统一样,都有文件系统,网卡等资源;那网卡来说,每个容器都会认为自己有一块独立的网卡,即使Host主机实际只有一块网卡资源,这样的方式使容器更像是一个独立的计算机。

namespace管着Host中全局唯一的资源,并让每个容器都觉得只有自己在使用它,namespace实现了容器间的资源隔离

Linux使用了6种namespace:Mount,UTS,IPC,PID,Network

一。Mount namspace:让容器看上去拥有整个文件系统

容器有自己的 / 目录,可执行mount和umount命令。这些操作只对当前的容器生效,不会影响到host和其他容器    

对于mount namespace的实验可以参考:https://segmentfault.com/a/1190000006912742

二。UTS namespace:让容器有自己的hostname

默认情况下容器的hostname是他的   短ID ,可以通过  -h或者--hostname来设置容器的主机名

三。IPC namespace:让容器有自己的共享内存和信号量(semaphore)

让容器有自己的共享内存和信号量(semaphore)来实现进程间通信,而不会与host以及其他容器的ipc混在一起

四。PID namespace:让容器有自己独立的PID进程

我们知道,容器在host中以进程的形式运行,例如:

docker ps可以看到运行了几个容器

我们通过   ps axf可以看到容器的进程:第一列为容器的PID号

可以看到所有容器的进程都挂在了dockerd进程下,同事可以看到容器的自己的子进程,但是如果我们进入到某个容器里面,ps后只能看到自己的进程了

例如:

从这里可以看到容器的PID不同于Host上面对应的PID,容器中PID=1的进程当然也不是host的init进程。这也就证明了容器有自己的一套独立的PID进程

五:Network namespace:让容器有自己独立 的网络资源

Network namespace让容器有自己独立的网卡 ,IP,路由等资源。

六。User namespace :让容器能够管理自己的用户,Host不能看到容器中创建的用户

当我们返回到Hostname上面的时候,切换到同样的用户,可以看到

在容器中创建的用户在host中并不存在

centos7下安装docker(10容器底层--cgroup和namespace)的更多相关文章

  1. docker(一) Centos7下安装docker

    docker(一) Centos7下安装dockerdocker(二) windows10下安装dockerdocker(三) 镜像和容器常用命令 docker(四) 使用Dockerfile构建镜像 ...

  2. CentOS7下安装docker(Docker系列1)

    CentOS7下安装docker 系统要求 为了安装docker,需要准备 64-bit的CentOS 7 删除非官方的Docker包 yum的仓库中有一个很旧的Docker包, 现在Docker官方 ...

  3. centos7下安装docker与镜像加速

    1.背景 centos7下安装docker 2.安装 第一步:检查是否为centos7版本 第二步:依赖环境安装 执行如下两个命令: yum -y install gcc yum -y install ...

  4. centos7 下安装docker报错:You could try using...

    搞了台VPS,想要装docker,发现死活装不上,各种报错.之前系统是centos6,发现官方现在已经不支持centos6了,遂升级到centos7,然后还是出现下面这个错误. Error: Pack ...

  5. centos7下安装docker(19容器架构)

    What,Why,How What:什么是容器? 说起容器大家想到的是什么?      集装箱(container),虚拟机,docker,k8s 1. 没毛病,因为容器与集装箱的英文都可以翻译成co ...

  6. centos7下安装docker(11容器操作总结)

    这段时间主要是学习了对容器的操作,包括:容器的状态:start,stop,restart,rename,pause,unpause,rm,attach,exec,kill,logs:还学习了对容器的资 ...

  7. centos7下安装docker(13.4容器volume总结)

    最近我们学习了docker 存储,首先docker存储有两种:storage driver和data volume. storage driver是由镜像层和容器层组成的,可以通过docker ins ...

  8. centos7下安装docker(12.4容器如何与外部进行通信)

    1.容器如何访问外部 前面我们做了很多试验:只要host能连外网,使用默认bridge(docker0)创建得容器就能访问外网,那么容器是怎样访问外网的呢? 注:这里的外网不仅是internet,包括 ...

  9. centos7下安装docker(8.3容器的常用操作)

    yu我们之前已经学习了如何运行容器docker run,也学习了如何进入容器docker attach和docker exec,下面我们来学习容器的其他操作: stop/start/restart 1 ...

随机推荐

  1. JavaWeb学习 (十四)————JSP基础语法

    一.JSP模版元素 JSP页面中的HTML内容称之为JSP模版元素.  JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观. 二.JSP表达式 JSP脚本表达式(expression)用于将 ...

  2. [转]TFS2010 Team Project Collections

    本文转自:https://www.cnblogs.com/shanyou/archive/2010/04/14/1712252.html Team Foundation Server 2010有一个改 ...

  3. 【Servlet】1、Servlet监听器及相关接口

    Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前.发生后可以做一些必要的处理. 接口: 目前Servlet2.4和JSP2.0总共有8个监听器接口和6个Event类,其中Ht ...

  4. Cylinder Candy(积分)

    Cylinder Candy Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge Edward the confectioner is ...

  5. github-SSH模式如何配置秘钥clone远程仓库以及分支切换

    一.ssh模式clone 恕我无知,之前使用git命令都是https模式,该模式每次push都需要输入账号和密码,而且速度会根据的网速的快慢而定. 近日电脑重装了系统,在用SSH模式clone远程仓库 ...

  6. HDU4287

    Intelligent IME Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  7. web print

    <!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  8. CSS外观属性

    CSS外观属性 color 文本颜色 line-height 行间距 text-aline水平对齐方式 text-indent 首行缩进 letter-spacing字间距 word-spacing ...

  9. Python之历史

    一.python简单介绍 python的创始人:吉多·范罗苏姆(Guido van Rossum),于1989年开始编写,到1991年完成了第一个python编译器.它是用C语言实现的,并能够调用C语 ...

  10. 6个顶级Python NLP库的比较!

    6个顶级Python NLP库的比较! http://blog.itpub.net/31509949/viewspace-2212320/ 自然语言处理(NLP)如今越来越流行,在深度学习开发的背景下 ...