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 一种运 ...
随机推荐
- Ranger-AdminServer安装Version2.0.0
Ranger-AdminServer安装, 对应的Ranger版本2.0.0. 1.安装规划 RangerAdmin安装依赖如下组件: mysql solr IP/机器名 安装软件 运行进程 dap2 ...
- Oracle打怪升级之路一【Oracle基础、Oracle查询】
前言 背景:2021年马上结束了,在年尾由于工作原因接触到一个政府单位比较传统型的项目,数据库用的是Oracle.需要做的事情其实很简单,首先从大约2000多张表中将表结构及数据导入一个共享库中,其次 ...
- Typescript Record的用法
Record<Keys,Type> 构造一个对象类型,其属性key是Keys,属性value是Tpye.被用于映射一个类型的属性到另一个类型 interface CatInfo { age ...
- C# 使用vs2017 创建类 时 注意点
1.创建新类后,在其他类无法new 这个新创建的类 ,怎么回事? 原因很简单,创建类时不带修饰符,默认是被保护的类 上图为创建类后的默认代码 ,没有修饰符 ,在其他类中无法引入改类的命名空间,会显示找 ...
- SQL Server数据库出现“无法访问数据库XXX(objectExplorer)”的解决办法
数据库版本为2008R2,服务器异常重启并重新挂载iscsi后,数据库出现"无法访问数据库XXX(objectExplorer)"问题. 输入SQL命令查看数据库状态 1 sele ...
- Echart可视化学习(十)
文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 官网找到类似实例, 适当分析,并且 ...
- Word2010格式化可爱的家乡
原文链接:https://www.toutiao.com/i6487795632349118990/ 准备样文 选中"可爱的家乡",选择"开始"选项卡,&quo ...
- RHCSA 第六天
一. 创建下列用户.组和组成员资格: 1.创建名为 sysmgrs 的组 2.创建用户 natasha 同时指定sysmgrs作为natasha的附加组 3.创建用户 harry 同时指定 sysm ...
- 开源数据可视化BI工具SuperSet(安装)
本次安装教程共分两大步骤,因为Superset 基于python3编写的web应用(flask) 所以要求python3环境,故首先要将linux系统自带的环境进行升级,已经是python3的可跳过- ...
- 【记录一个问题】用毫无用处的方法解决了libtask的asm.S在ndk下编译的问题
昨天提到,libtask中的asm.S使用的是ARM 32位的语法,因此在ARM 64下无法编译通过. 于是查了一下资料,改写了一下汇编代码,使得可以在64位下编译通过.源码如下 #if define ...