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 ...
 
随机推荐
- netty源码解解析(4.0)-10 ChannelPipleline的默认实现--事件传递及处理
			
事件触发.传递.处理是DefaultChannelPipleline实现的另一个核心能力.在前面在章节中粗略地讲过了事件的处理流程,本章将会详细地分析其中的所有关键细节.这些关键点包括: 事件触发接口 ...
 - Lucene实战之基于StandardAnalyzer读写索引
			
前言 使用lucene创建索引时如果指定了解析器,则需要读写都使用这个解析器,目前我发现也就是在处理中文这块比较麻烦,像你在使用solr时如果配置了ik分词,则需要把index清空重新创建才能继续搜索 ...
 - MySQL实验准备(二)--Python模拟数据(MySQL数据库)
			
Python模拟数据(MySQL数据库) 数据模拟 目的:模拟多个表的插入和查询数据的模拟,再通过基准测试脚本测试服务器性能和收集数据,仿真模拟. 备注: 如果需要基础的python环境,可以查看&l ...
 - Bell(hdu4767+矩阵+中国剩余定理+bell数+Stirling数+欧几里德)
			
Bell Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
 - 通过写一个Demo展示C#中多种常用的集合排序方法
			
不多说,程序很简单,就是将集合中的数据进行排序,但使用到的知识点还是比较多的,大牛勿喷,谨献给初学者!直接上程序吧! namespace Demo { /// <summary> /// ...
 - 1788:Pell数列
			
1788:Pell数列 查看 提交 统计 提问 总时间限制: 3000ms 内存限制: 65536kB 描述 Pell数列a1, a2, a3, ...的定义是这样的,a1 = 1, a2 = 2 ...
 - spark (java API) 在Intellij IDEA中开发并运行
			
概述:Spark 程序开发,调试和运行,intellij idea开发Spark java程序. 分两部分,第一部分基于intellij idea开发Spark实例程序并在intellij IDEA中 ...
 - SyntaxError: JSON.parse: bad control character in string literal at line 1 column 16 of the JSON data
			
JSON.parse转化Json字符串时出现:SyntaxError: JSON.parse: bad control character in string literal at line 1 co ...
 - 慕学在线网0.5_xadmin的全局配置
			
全局配置包括了以下修改: 开启主题功能: 修改左上角的"django Xadmin"和主界面的"我的公司": App菜单收叠: App名字修改(汉化). 1.把 ...
 - 外网访问局域网ip的方法
			
https://jingyan.baidu.com/article/48b558e335e3ac7f39c09a59.html 步骤: 1.浏览器内输入:192.168.1.1进入路由器管理界面 2. ...