浅谈Docker底层原理
1 Docker和虚拟机异同
如下图,来自Docker官网,左边为Docker,右边为虚拟机,VM虚拟机是在宿主机器操作系统的基础上创建操作系统
。Docker是在宿主机器的操作系统上创建Docker引擎,直接调用硬件资源
。
但是Docker和虚拟机都有的相同点,那就是隔离性,Docker最大优势就是相对于虚拟机更加的轻量级。
因此,我们可以总结出:
Docker和虚拟机相同点:
- 隔离性
- 资源可分配
Docker和虚拟机不同点:
- 虚拟机是硬件层抽象,虚拟硬件和操作系统,而Docker是应用层抽象,只虚拟化操作系统
- Docker相比虚拟机更加轻量级和便携
- Docker启动速度更快
2 Docker底层原理
说到Docker的底层原理,不得不说下Linux中的两个关键性概念:cgroups和namespace,下面我们利用wiki的参考来进行下讲解。
2.1 cgroups
cgroups,其名称源自控制组群(英语:control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)。
cgroups的一个设计目标是为不同的应用情况提供统一的接口,从控制单一进程到操作系统层虚拟化(像LXC)。
LXC,其名称来自Linux软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system–level virtualization)技术,为Linux内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。透过统一的名字空间和共享API来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱执行环境,使得Linux用户可以容易的创建和管理系统或应用容器。
在Linux内核中,提供了cgroups功能,来达成资源的区隔化。它同时也提供了名称空间区隔化的功能,使应用程序看到的操作系统环境被区隔成独立区间,包括行程树,网络,用户id,以及挂载的文件系统。但是cgroups并不一定需要启动任何虚拟机。
LXC利用cgroups与名称空间的功能,提供应用软件一个独立的操作系统环境。LXC不需要Hypervisor这个软件层,软件容器(Container)本身极为轻量化,提升了创建虚拟机的速度。软件Docker被用来管理LXC的环境。
cgroups功能:
- **资源限制:**组可以被设置不超过设定的内存限制;这也包括虚拟内存。
- **优先级:**一些组可能会得到大量的CPU 或磁盘IO吞吐量。
- **结算:**用来度量系统实际用了多少资源。
- **控制:**冻结组或检查点和重启动。
2.2 Namespace
名字空间(英语:Namespace),也称命名空间、名称空间等,它表示着一个标识符(identifier)的可见范围。一个标识符可在多个名字空间中定义,它在不同名字空间中的含义是互不相干的。这样,在一个新的名字空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他名字空间中。
在编程语言中,名字空间是对作用域的一种特殊的抽象,它包含了处于该作用域内的标识符,且本身也用一个标识符来表示,这样便将一系列在逻辑上相关的标识符用一个标识符组织了起来。许多现代编程语言都支持名字空间。在一些编程语言(中,名字空间本身的标识符也属于一个外层的名字空间,也即名字空间可以嵌套,构成一个名字空间树,树根则是无名的全局名字空间。
命名空间最典型的是在Spring的IOC配置文件中:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><property name="basePackage" value="org.ymx.Dao"/>
</bean>
3 总结
Docker是采用Go语言编写的项目,底层原理就是利用Linux的cgroups和namespace,本质上就是操作系统的一个进程,cgroups主要负责资源分配,namespace主要负责容器间的隔离(包括进程和网络等等)。
参考链接:
https://upload.wikimedia.org/wikipedia/commons/e/e7/Linux_kernel_unified_hierarchy_cgroups_and_systemd.svg
https://zh.wikipedia.org/wiki/Cgroups
https://zh.wikipedia.org/wiki/LXC
https://zh.wikipedia.org/wiki/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4
https://www.docker.com/resources/what-container
浅谈Docker底层原理相关推荐
- 浅谈MQTT底层原理(网络调试助手直连阿里云)
目录 第一节 本文探讨的内容 第二节 环境搭建 第三节 MQTT控制报文格式 第四节 CONNEC报文 第五节 订阅和取消订阅 第六节 接收消息和发布消息 第七节 网络调试助手直连阿里云极速体验 第一 ...
- 浅谈 git 底层工作原理
浅谈 git 底层工作原理 系统复习到这里也快差不多了,大概就剩下两三个 sections,这里学习一下 git 的 hashing 和对象. 当然,跳过问题也不大. config 文件 这里还是会用 ...
- 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包
浅谈:Spring Boot原理分析(更多细节解释在代码注释中) 通过@EnableAutoConfiguration注解加载Springboot内置的自动初始化类(加载什么类是配置在spring.f ...
- 浅谈前端路由原理hash和history
浅谈前端路由原理hash和history
- 浅谈“三层结构”原理与用意(转帖)
浅谈"三层结构"原理与用意 序 在刚刚步入"多层结构"Web应用程序开发的时候,我阅读过几篇关于"asp.net三层结构开发"的文章.但其多 ...
- svc的参考文献_浅谈SVC的原理及作用
浅谈 SVC 的原理及作用 超(特)高压运行检修公司 自贡中心 涂洪骏 摘要: 介绍了静止补偿器 (SVC) 的工作特性.基本原理.运行方式,重点针对 SVC 的作用进行了分析. 关键词 :静止补偿器 ...
- 浅谈Wi-Fi渗透--原理篇
浅谈Wi-Fi渗透–原理篇 在这个手机比人多的移动时代,无线网络Wi-Fi遍布每个角落,殊不知隐藏其中的风云涌动 广义上无线网络应用类型如下,今天的文章就聚焦于 WLAN的一种无线局域网技术--Wi- ...
- 浅谈会话劫持原理及实践
<监视你的一举一动> ---浅谈会话劫持原理及实践 前言 通常,大家所说的入侵,都是针对一台主机,在获得管理员权限后,就很是得意:其实,真正的入侵是占领整个内部网络.针对内部网络的攻击方法 ...
- 浅谈实时数据库系统原理及其应用
浅谈实时数据库系统原理及其应用 孙俊彦 苏州大学计算机科学与技术学院 摘要: 现代的工程和时间关键型应用对数据库的实时性和对数据直接分析和处理的能力要求特别高,单纯的传统关系数据库已经不能满足需要 ...
最新文章
- SSD情何以堪!微软:扔掉你的旧PC换台新的
- 使用memcache的session入库
- DataBase Convert Class
- Node --- Promise中的多异步协作
- 160 - 28 CoSH.2
- linux镜像包含数据库数据么,docker 镜像中包含数据库环境和运行环境
- Tomcat学习总结(10)——Tomcat多实例冗余部署
- ObjC学习8-重头戏来了!Foundation框架
- python日常能做什么-为什么Python这么火?看看它能做什么你就知道了
- [swustoj 1091] 土豪我们做朋友吧
- hⅰgh怎么读音发音英语_gh的发音规律
- UAV运动学方面的约束
- Ubuntu常用软件大全
- 高通联机修改IMEI等参数的相关解析
- Maven安装教程详解
- 接支付宝支付的那些坑
- 中国各主要大城市经纬度数据
- python中的snip用法_腾讯mac截图软件Snip使用教程及常见问题
- html页面跳转传值原生,html页面跳转传递参数问题
- stm32h7高速通信_【STM32H7教程】第48章 STM32H7的FMC总线应用之是32路高速IO扩展