docker基础——1.原理解读
1. 相关内核知识
docker本质上是宿主机上的进程。
通过namespace实现资源隔离,通过cgroups实现资源限制,通过写时复制机制copy-on-write实现高效文件操作。
依赖kernel版本3.10+
1.1 namespace
namespace的6项隔离:
UTS——主机名与域名
IPC——信号量、消息队列、共享内存
PID——进程编号
Network——网络设备、网络栈、端口等
Mount——挂载点(文件系统)
User——用户和用户组
1.2 cgroups
它可以限制被namespace隔离起来的资源,还可以为资源设置权重,计算使用量,操控任务(进程或线程)启停等。
本质上来说,cgroups是内核附加在程序上的一系列钩子(hook),通过程序运行时对资源的调度触发相应的钩子以达到资源追踪和限制的目的。
cgroups的作用:
(1)资源限制——可以限制任务使用的资源总额。
(2)优先级分配——通过分配的CPU时间片数量及磁盘IO带宽大小,实际上就相当于控制了任务的优先级。
(3)资源统计——可以统计系统的资源使用量,如CPU使用时长、内存用量等。
(4)任务控制——可以对人物执行挂起、恢复等操作。
cgroups的组织结构:
(1)任务task——linux内核本身的调度和管理并不对进程和线程进行区分,只根据clone创建时传入的参数不同来从概念上区分,所以统一称为任务。
(2)控制组cgroup——cgroups中的资源控制都以cgroup为单位实现。cgroup表示按某种资源控制标准划分而成的任务组,包含一个或多个子系统。
(3)子系统subsystem——cgroups中的子系统就是一个资源调度控制器。
(4)层级hierarchy——层级由一系列cgoup以一个树状结构排列而成,每个层级通过绑定对应的子系统进行资源控制。
传统的Unix任务管理,先启动init任务作为根节点,再由init节点创建子任务作为子节点,形成树状结构。而系统中的多个cgroup构成的层级并非单根结构,可以允许多个根。
子系统实际上就是cgroups的资源控制系统,共有9种:
(1)blkio——块设备
(2)cpu——cpu资源
(3)cpuacct——cpu资源使用情况报告
(4)cpuset——可以为cgroup中的任务分配独立的CPU(针对多处理器)
(5)devices——可以开启或关闭cgroup中任务对设备的访问
(6)freezer——可以挂起或恢复cgroup中的任务
(7)memory——内存资源控制及报告
(8)perf_event——性能测试
(9)net_cls——cgroup中的任务创建的数据报文的类别标识符
2. 容器引擎发展
容器是一个与宿主机系统共享内核但与系统中的其他进程资源相隔离的执行环境。
根据得到的信息,容器引擎在宿主机上创建namespace以及相应的cgroups配置。
lxc——>libcontainer——>runC
docker早期就是对lxc的封装,后来产生了libcontainer引擎,runC是对libcontainer的精简封装。
(个人理解,可能有误)
3. Docker架构概览
https://docs.docker.com/engine/docker-overview/

docker使用C/S架构,client发起请求到daemon,daemon根据约定信息执行相应命令。
例如图中docker run命令的执行过程,client端发起请求,把表单post到daemon,daemon解析这些参数之后,寻找本地的image文件,并启动容器。
注:大部分内容参考《Docker容器与容器云》
docker基础——1.原理解读的更多相关文章
- Docker基础(1) 原理篇
Docker是什么 Docker的构成 Docker的分层和写时拷贝策略 Docker与主流虚拟机的区别 Docker镜像与容器的关系 镜像的变更管理 Docker是什么 Docker是一个开源的应用 ...
- Webpack探索【15】--- 基础构建原理详解(模块如何被组建&如何加载)&源码解读
本文主要说明Webpack模块构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack的基础构建原理. 本文使用的W ...
- 『现学现忘』Docker基础 — 16、Docker中的基本概念和底层原理
目录 1.Docker的底层原理 2.Docker中常用的基本概念 3.run命令的运行流程 4.为什么Docker比VM快 Docker架构图: 我们依照Docker架构图进行Docker基础概念的 ...
- docker基础_docker引擎内部原理
docker引擎内部原理 docker主要由以下主要组件构成:docker客户端.docker守护进程(daemon).containerd.runc.shim daemon daemon的主要功能包 ...
- Docker基础技术:Linux Namespace(下)
在 Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中,主 ...
- Docker 基础技术:Linux Namespace(下)
导读 在Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中 ...
- docker基础内容讲解
一.初识docker 1.1 LXC介绍 LXC为LinuX Container的简写.Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提 ...
- 基础 | batchnorm原理及代码详解
https://blog.csdn.net/qq_25737169/article/details/79048516 https://www.cnblogs.com/bonelee/p/8528722 ...
- Docker容器的原理与实践(上)
本文来自网易云社区. 虚拟化 是一种资源管理技术,将计算机的各种资源予以抽象.转换后呈现出来, 打破实体结构间的不可切割的障碍,使用户可以比原本更好的方式来应用这些资源. Hypervisor 一种运 ...
随机推荐
- vue3 父菜单渲染出来了,但是子菜单渲染不出来的原因
子菜单始终渲染不出来,控制台出现警告如下: 在查看框架源码时,发现在渲染时应用了递归.在这个博客找到答案,原因是升级的vue的版本没有升级@vue/compiler-sfc的版本,这两个版本应该保持一 ...
- SQLAlchemy(十)
ORM操作在实际项目中的应用非常多,涉及到的框架也是根据不同的项目有不同的处理模块,不过操作流程和步骤都是大同小异基本没有什么太大变化,唯一需要注意的就是在实际操作过程中你要使用的ORM框架的处理性能 ...
- Java 私有接口 【类中嵌套接口】
1.前言 接口十分常用,能规范实现类的命名 和 实现多个实现类的向上转型成统一类型 ,但是接口的修饰符只能是 public吗? 当然不是,可以是private , 难道是像这样? 显然不可以,已经报错 ...
- Centos安装rrdtool的yum源
由于centos的标准组件中是不带rrdtool的,因此我们需要添加一个dag的yum源,以安装rrdtool. 修改/etc/yum.repos.d/CentOS-Base.repo, #vi /e ...
- Go语言系列之单元测试
go test工具 Go语言中的测试依赖go test命令.编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法.规则或工具. go test命令是一个按照一定约定和组织的测试代码的驱动 ...
- Cookie.Session到Token和JWT
一.session和cookie: 现在一般都是session和cookie一起用,一起提.但是他们俩其实不是一定要在一起. session的产生原因是,http协议是无状态的 这就导致了,不同的用户 ...
- AI系统——梯度累积算法
明天博士论文要答辩了,只有一张12G二手卡,今晚通宵要搞定10个模型实验 挖槽,突然想出一个T9开天霹雳模型,加载不进去我那张12G的二手卡,感觉要错过今年上台Best Paper领奖 上面出现的 ...
- vue特效网站集锦
1.17素材网 http://www.17sucai.com/pins/tag/7012.html
- Nginx 基础入门
目录 Nginx 基础入门 1.Nginx简介 1.1.相关名词解释 2.Nginx优势 3.Nginx部署 4.Nginx配置文件 5.Nginx模块 6.Nginx配置文件 6.1.Locatio ...
- 利用Spring AOP切面对用户访问进行监控
开发系统时往往需要考虑记录用户访问系统查询了那些数据.进行了什么操作,尤其是访问重要的数据和执行重要的操作的时候将数记录下来尤显的有意义.有了这些用户行为数据,事后可以以用户为条件对用户在系统的访问和 ...