Docker容器技术的核心
容器技术的核心
所谓容器,其实是由Linux Namespace、Linux Cgroups和rootfs三种技术构建出来的进程的隔离环境
对于Docker项目来说,其实最核心就是为待创建的用户进程:
- 启动Linux Namespace配置
- 设置指定的Cgroups参数
- 切换进程的根目录(Change Root)
1. Namespace机制
PID Namespace实现创建(clone)出来的进程,认为自己的当前容器里PID为1的进程,看不到宿主机的真正的进程,也看不到其他PID的具体情况
Mount Namespcace实现被隔离的进程只能看到当前Namespace的挂载点信息
Network Namespace实现让被隔离进程看到当前Namespace的网络设备和配置
Linux提供了UTS、IPC、User的Namespace
总结 :Namespce技术修改了应用进程看待整个计算机的“视图”,只能看到某些指定的内容
Namespace隔离机制的不足:
多个容器使用的是同一个宿主机的操作系统内核,windowns上运行Linux容器,或者在低版本的Linux宿主机上运行高版本的Linux容器,是不行的
2. Cgroups
虽然进程被隔离起来了,但是它所能使用的资源,比如CPU、内存,是可以被宿主机上的其他进程占用的,也可以将所有的资源耗尽,而Cgroups解决了这个问题
Cgroups全称是Linux Control Group,主要作用就是限制一个进程能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等。
Cgroups的缺点:
/proc文件不知道用户通过Cgroups给容器做了什么资源限制,所以当我们在容器里执行top命令的时候,看到的其实是宿主机的CPU和内存数据
3. rootfs
容器的根目录通常会挂载一个完整的文件系统,在容器启动后就可以用ls /查看根目录所有的内容,
这个挂载在容器根目录,为容器提供隔离后执行环境的文件系统,就是rootfs(容器镜像),
容器镜像中,通过会包括如下目录和文件
bin dev etc home lib lib64 mnt opt proc root run sbin sys tmp usr var
rootfs只是一个操作系统的所有文件和目录,并不包含内核,通过Mount Namespace和rootfs,可以构建出一个完善的文件系统隔离环境,其中使用了chroot和pivot_root两个系统调用切换进程根目录的能力。
在mount namespace被创建后,父进程会把自己的文件结构复制给子进程,而子进程中新的namespace所有的mount操作都只影响自身的文件系统,不对外界产生任何影响。
每次修改rootfs,新的rootfs和旧的就不同了,Docker公司为了解决rootfs的增量修改的功能,创新的提出了层的概念
容器中的层的概念
在rootfs的基础上,Docker公司创新的使用了多个增量rootfs联合挂载一个完整rootfs的方案
例如,C目录是由A和B挂载得到,拥有A和B的所有文件
层分为三种,如下图

1.只读层
位于rootfs最下面,挂载方式是只读,这些层以增量的方式分别包含了操作系统的一部分
2.可读写层
挂载方式为rw,比如,当删除只读的一个xx文件时,这个删除操作实际只是在可读写层创建了一个名叫.wh.xx的文件,当两个层联合挂载后,xx文件会被.wh.xx文件遮挡,相当于“消失了”
在容器中修改文件时,Docker会从上到下在各镜像层中查找文件。找到后会把此文件复制到容器层(可读写层),这就是Copy on Write
3. init层
以一个-init结尾的层,在只读和读写层之间,用来存放/etc/hosts、/etc/resolve.conf等信息,这此文件本来是属于操作系统层的一部分,但是用户往往需要在运行时指定hostname,所以就需要在可读写层修改,这些修改往往保对当前容器有效,我们并不想在docker commit的时候,把这些和读写层一起提交,于是就有了这一层
参考链接:https://coolshell.cn/articles/17010.html
Docker容器技术的核心的更多相关文章
- Docker容器技术的核心原理
目录 1 前言 2 docker容器技术 2.1 隔离:Namespace 2.2 限制:Cgroup 2.3 rootfs 2.4 镜像分层 3 docker容器与虚拟机的对比 1 前言 上图是百度 ...
- k8s 核心功能 - 每天5分钟玩转 Docker 容器技术(116)
本节带领大家快速体验 k8s 的核心功能:应用部署.访问.Scale Up/Down 以及滚动更新. 部署应用 执行命令: kubectl run kubernetes-bootcamp \ --im ...
- 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程 ...
- Prometheus 到底 NB 在哪里?- 每天5分钟玩转 Docker 容器技术(84)
本节讨论 Prometheus 的核心,多维数据模型.我们先来看一个例子. 比如要监控容器 webapp1 的内存使用情况,最传统和典型的方法是定义一个指标 container_memory_usag ...
- 如何快速部署 Prometheus?- 每天5分钟玩转 Docker 容器技术(85)
上一节介绍了 Prometheus 的核心,多维数据模型.本节演示如何快速搭建 Prometheus 监控系统. 环境说明 我们将通过 Prometheus 监控两台 Docker Host:192. ...
- 学习 Kubernetes 的 Why 和 How - 每天5分钟玩转 Docker 容器技术(114)
这是一个系统学习 Kubernetes 的教程,有下面两个特点: 系统讲解当前最流行的容器编排引擎 Kubernetes包括了安装部署.应用管理.网络.存储.监控.日志管理等多各个方面. 重实践并兼顾 ...
- 5 秒创建 k8s 集群 - 每天5分钟玩转 Docker 容器技术(115)
据说 Google 的数据中心里运行着超过 20 亿个容器,而且 Google 十年前就开始使用容器技术. 最初,Google 开发了一个叫 Borg 的系统(现在命令为 Omega)来调度如此庞大数 ...
- 定时执行 Job - 每天5分钟玩转 Docker 容器技术(135)
Linux 中有 cron 程序定时执行任务,Kubernetes 的 CronJob 提供了类似的功能,可以定时执行 Job.CronJob 配置文件示例如下: ① batch/v2alpha1 是 ...
- Docker容器技术的PaaS云平台架构设计***
基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程.平台提供基础设施.中间件.数据服务.云服务器等资源,开发人员 ...
随机推荐
- Could not load NIB in bundle: 'NSBundle.....
学习NSNotification时遇到了这个问题,错误日志如下: 2015-08-28 17:47:24.617 NSNotificationDemo[7158:786614] *** Termina ...
- 读写properties文件
1. 读properties文件 Properties props = new Properties(); try { InputStream in = new FileInputStream(&qu ...
- v-text,v-html等区别
首先我们知道vue中有很多自定义指令,以v- 开头,例如:v-text,v-bind,v-model, v-if,等 在这些指令中,部分指令之间是很容易被混淆,所以今天决定自己总结一下以下几个相似指令 ...
- BootStrap实现简单响应式导航菜单
用BootStrap实现响应式导航栏,我会对其中的一些样式进行说明. 先上代码,是一个很简单的Demo. <!doctype html> <html> <head&g ...
- .net开源生态,WTM与NCC
天下大势,分久必合,合久必分.改朝换代都如花开花谢,过眼云烟,更别提开发语言的更迭了. 我们所坚持的,只是那最初的感动,那“只是在人群中多看了你一眼”的惊艳.三十年河东,三十年河西,不忘初心,方得始终 ...
- 并发编程(4)——AbstractQueuedSynchronizer
AQS 内部类Node 等待队列是CLH有锁队列的变体. waitStatus的几种状态: static final int CANCELLED = 1; /** waitStatus value t ...
- 基于tp3.2的腾讯云短信验证码的实现
新手小白在公司要完成短信验证码注册功能,最初由于没有经验,网上的教程又不是很全,便参考着官方API文档,进行开发 直接进入正题:使用composer下载腾讯云短信接口(记得添加依赖).在项目目录下新建 ...
- 原 CNN--卷积神经网络从R-CNN到Faster R-CNN的理解(CIFAR10分类代码)
1. 什么是CNN 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Netwo ...
- 从零开发一款自己的小程序UI组件库(二)
写在前面:从零开发一款自己的小程序UI组件库(一) 上节我们讲到初始化组件库模板.模板文件概述.模板上传npm以及npm包文件下载至本地并运用到项目.这节我们继续,内容主要有基础UI组件库的搭建(bu ...
- 浅谈IDEA搭建SSM框架的集成
前言 学习完MyBatis,Spring,SpringMVC之后,我们需要做的就是将这三者联系起来,Spring实现业务对象管理,Spring MVC负责请求的转发和视图管理, MyBatis作为数据 ...