实现原理

docker虚拟化 的核心是需要解决两个问题,资源隔离与资源限制

  • 虚拟机是通过硬件虚拟化技术,通过一个 hypervisor 层实现对资源的彻底隔离

  • 容器则是通过操作系统级别的虚拟化技术,利用操作系统内核CgroupNamespace 特性,此方法是完全通过软件的方式来实现的

nameSpace 资源隔离

命名空间是全局资源的一种抽象,将不同的资源放在不同的命名空间里,各个命名空间之间是相互隔离的。

CGroup 资源限制

通过 namespace 可以保证容器之间的隔离,但是无法控制每个容器占有多少资源。如果某个容器正在执行 CPU 密集型任务,那么就会影响其他的容器中任务的性能与执行效率,导致多个容器相互影响并抢占资源。如何对多个容器资源的使用进行限制,就成了解决进程虚拟资源

Control Groups 简称(CGroups)就是能够隔离宿主机上的物理资源,如 CPU内存磁盘 IO 等,每个CGroup都是一组被相同的b标准和参数限制的进程。而我们需要做的就是把这个容器加入到指定的 CGroup中。

UnionFS 联合文件系统

docker 借助于 LinuxnameSpacecGroup 分别解决了资源隔离和资源限制的问题,那么这个容器就是很轻量级的,



镜像的结构正如上图所示,是一层层的堆叠起来的,镜像中的这些层都是 只读层,当我们运行程序的时候,就是只要添加新的可写层即可(容器层)。对于运行中的容器所做的所有更改(比如写入新文件,修改现有文件,删除文件)都将写入这个容器层。

对于容器的操作,主要是使用了写时复制 (CoW) 技术。只有需要写时才去复制,Cow技术可以让所有的容器共享 image 文件系统。所有数据都从 image 中读取。只有对当前文件进行写操作时,才从 images 中把要写的文件复制到自己的文件系统进行更改。无论多少个容器都共享一个 images。

docker 实现原理的更多相关文章

  1. 一、docker的原理

    一.docker解决什么问题: 高效的利用资源 应用之间相互隔离 应用之间不能发生资源抢占,每个应用只能使用事先注册申请的资源. 环境封装,利于迁移 二.docker的原理: 1.Namespaces ...

  2. Docker技术原理

    Docker技术原理之Linux Namespace(容器隔离) https://blog.csdn.net/songcf_faith/article/details/82748987 Docker技 ...

  3. 沉淀,再出发:docker的原理浅析

    沉淀,再出发:docker的原理浅析 一.前言 在我们使用docker的时候,很多情况下我们对于一些概念的理解是停留在名称和用法的地步,如果更进一步理解了docker的本质,我们的技术一定会有质的进步 ...

  4. docker运行原理与使用总结

    docker运行原理概述 Client-Server架构 docker守护进程运行在宿主机上systemctl start docker daemon进程通过socket从客户端(docker命令)接 ...

  5. [转载] Docker 实现原理

    目录 Namespaces 进程 网络 libnetwork 挂载点 chroot
 CGroups UnionFS 存储驱动 AUFS 其他存储驱动 总结 原文链接:https://dravenes ...

  6. Docker底层原理介绍

    1.docker介绍 1.1什么是docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻 ...

  7. 深入分析 Docker 镜像原理

    摘要:近日, DaoCloud 软件工程师孙宏亮在 CSDN Container 微信群为大家带来了 Docker 镜像原理的深度分享,本次分享的重点是 Docker 镜像,分享的内容主要包含两个部分 ...

  8. Docker 工作原理分析

    docker 容器原理分析 docker 的工作方式 Namespace 容器对比虚拟机 Cgroups 容器看到的文件 Mount namespace chroot rootfs Volume(数据 ...

  9. docker核心原理

    容器概念. docker是一种容器,应用沙箱机制实现虚拟化.能在一台宿主机里面独立多个虚拟环境,互不影响.在这个容器里面可以运行着我饿们的业务,输入输出.可以和宿主机交互. 使用方法. 拉取镜像 do ...

  10. Docker Compose 原理

    Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制.也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 do ...

随机推荐

  1. LKWA靶机学习

    LKWA靶机学习 目录 LKWA靶机学习 1 下载地址 2 Blind RCE 2.1 利用Burpsuite Collaborato模块来查看输出. 2.2 尝试利用dnslog进行回显 3 XSS ...

  2. Vue学习笔记之表单绑定

    1. 概述 1.1. 什么是数据的双向绑定 Vue.js是一个MV VM框架, 即数据双向绑定, 即当数据发生变化的时候, 视图也就发生变化, 当视图发生变化的时候,数据也会跟着同步变化.这也算是Vu ...

  3. unity puerTS热更

    https://blog.csdn.net/yupu56/article/details/120766597

  4. 问题集锦 ~ MySQL

    # 在存储过程中,变量赋值失败 declare parent text; select parent into Parent where id = 1; select Parent; 查询的字段不能和 ...

  5. Git提交代码报错husky > pre-commit,

    拉取了新项目以后,git突然不能用了   报husky > pre-commit, 解决办法:进入你的项目显示隐藏git文件  进入git文件   找到  hooks / pre-commit  ...

  6. EveryCircuit_v2.15汉化破解版apk下载

    安卓手机扫码下载  大小 6.44M EveryCircuit(电子电路模拟器)是一个专为电子信息技术专业的人士所打造的软件,它能够让你轻松的了解到电子电路究竟是如何进行工作的. 下载地址:https ...

  7. C++实现顺序栈相关操作代码

    #include<iostream>#include<cstdlib>using namespace std;#define MAXSIZE 100#define OK 1#d ...

  8. SAP MD04屏幕显示增强

    需求 在看物料MRP结果的时候,业务人员想要看到工单批次,工单批次是我们这边工单下达后传输到其他系统,然后由其他系统回传回来的. 开发步骤 主要使用二代增强出口:M61X0002 创建增强项目 事务码 ...

  9. 用例需注意的点-UI自动化

    记几条--用例注意事项:用例从功能里面转化而来,并且不能脱离业务(针对某一个页面功能\某一个流程业务,写一条用例:即将界面操作间接转化为代码去操作!)1用例要尽量独立,相互不影响!(单独一条都可运行) ...

  10. dfs-入门模板

    模板 void dfs()//参数用来表示状态 { if(到达终点状态) { ...//根据题意添加 return; } if(越界或者是不合法状态) return; if(特殊状态)//剪枝 ret ...