centos7下安装docker(10容器底层--cgroup和namespace)
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)的更多相关文章
- docker(一) Centos7下安装docker
docker(一) Centos7下安装dockerdocker(二) windows10下安装dockerdocker(三) 镜像和容器常用命令 docker(四) 使用Dockerfile构建镜像 ...
- CentOS7下安装docker(Docker系列1)
CentOS7下安装docker 系统要求 为了安装docker,需要准备 64-bit的CentOS 7 删除非官方的Docker包 yum的仓库中有一个很旧的Docker包, 现在Docker官方 ...
- centos7下安装docker与镜像加速
1.背景 centos7下安装docker 2.安装 第一步:检查是否为centos7版本 第二步:依赖环境安装 执行如下两个命令: yum -y install gcc yum -y install ...
- centos7 下安装docker报错:You could try using...
搞了台VPS,想要装docker,发现死活装不上,各种报错.之前系统是centos6,发现官方现在已经不支持centos6了,遂升级到centos7,然后还是出现下面这个错误. Error: Pack ...
- centos7下安装docker(19容器架构)
What,Why,How What:什么是容器? 说起容器大家想到的是什么? 集装箱(container),虚拟机,docker,k8s 1. 没毛病,因为容器与集装箱的英文都可以翻译成co ...
- centos7下安装docker(11容器操作总结)
这段时间主要是学习了对容器的操作,包括:容器的状态:start,stop,restart,rename,pause,unpause,rm,attach,exec,kill,logs:还学习了对容器的资 ...
- centos7下安装docker(13.4容器volume总结)
最近我们学习了docker 存储,首先docker存储有两种:storage driver和data volume. storage driver是由镜像层和容器层组成的,可以通过docker ins ...
- centos7下安装docker(12.4容器如何与外部进行通信)
1.容器如何访问外部 前面我们做了很多试验:只要host能连外网,使用默认bridge(docker0)创建得容器就能访问外网,那么容器是怎样访问外网的呢? 注:这里的外网不仅是internet,包括 ...
- centos7下安装docker(8.3容器的常用操作)
yu我们之前已经学习了如何运行容器docker run,也学习了如何进入容器docker attach和docker exec,下面我们来学习容器的其他操作: stop/start/restart 1 ...
随机推荐
- windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
- IE8浏览器官方下载 包含Windows中繁英文各个版本
当你的Windows XP安裝IE8时提示"此安装不支持您的操作系统的当前语言",或者安装IE8,在语言包安装时报错,可以尝试使用先安装英文版本,再安装多国语言包的方式操作. 20 ...
- 23种设计模式+J2EE设计模式学习笔记-初识设计模式
设计模式简介: 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结.(个人理解:设计模式是不关乎业务,逻辑实现,针对普遍问题的一种解决方案). 设计模式的类型: 传统23种设 ...
- hadoop的企业优化
前言: Mapreduce程序的效率的瓶颈在于两点: 计算机性能: CPU.内存.磁盘健康.网络 I/O操作: 数据倾斜 map和reduce数量设置不合理 map的运行时间太长,导致reduc的等待 ...
- Python全栈学习_day002作业
Day2作业及默写 1.判断下列逻辑语句的True,False. 1)1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 & ...
- 初学CSS-3-文字的属性
文字样式属性: 格式:font-style:italic;/normal; 快捷键:fsi / fsn + tab键 文字粗细属性: 格式:font-weight:bold;/bolder;/ligh ...
- JS之iscroll.js的使用详解
入门 Scroll是一个类,每个需要使用滚动功能的区域均要进行初始化.每个页面上的iScroll实例数目在设备的CPU和内存能承受的范围内是没有限制的. 尽可能保持DOM结构的简洁.iScroll使用 ...
- javascript选项卡切换样式
HTML代码 <ul class="touzi_xuan1" id="qixian"> <li>****: </li> &l ...
- layer插件layer.photos()动态插入的图片无法正常显示
layer插件layer.photos()动态插入的图片无法正常显示,点击后面插入的图片,显示的是之前的图片列表,再次点击又是正常 有朋友遇到同样的问题 http://fly.layui.com/ji ...
- SSM环境搭建
流程 1,maven 依赖 2,spring 配置文件 3,mybatis 配置文件 4,springMVC 配置文件 5,web.xml pom依赖 1,定义版本 <properties> ...