Docker Note1——架构和三要素
Docker官方文档: https://docs.docker.com/
一、docker架构
C/S架构,主要由 client / daemon / containers / images 组成。
二、docker三要素
三要素:1)Image镜像 2)Container容器 3)Repository仓库
1) Docker镜像
镜像是容器构建的基石,是基于联合文件系统的一种层式结构。
联合文件系统(UnionFS)是一种分层、轻量级、高性能的文件系统。它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一虚拟文件系统下。Union文件系统是Docker镜像的基础。
典型的Linux文件系统由bootfs和rootfs两部分组成,bootfs(boot file system)主要包含 bootloader和kernel,bootloader主要是引导加载kernel,当kernel被加载到内存中后 bootfs就被umount了。 rootfs (root file system) 包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件,rootfs就是不同操作系统的发行版。
Docker容器的文件系统类似于Linux虚拟化栈。Docker镜像是由文件系统叠加而成。最底端是一个引导文件系统,即bootfs, 很像典型的Linux/Unix的引导文件系统。当一个容器启动时,首先加载bootfs用于引导重要文件,当容器启动后,bootfs引导文件系统会被卸载(unmount)。
传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并完成了完整性检查之后,rootfs将会从read-only改为read-write。
Docker的镜像加载时,在bootfs自检完毕之后并不会把rootfs的read-only改为read-write。而是利用联合加载union mount(UnionFS的一种挂载机制)将一个或多个read-only的rootfs加载到之前的read-only的rootfs层之上。在加载了这么多层的rootfs之后,仍然让它看起来只像是一个文件系统,在Docker的体系里把union mount的这些read-only的rootfs叫做Docker的镜像。
每个只读镜像层都是只读的,以后永远不会变化。当创建一个新容器时,Docker会构建出一个镜像栈,并在栈的最顶端添加一个读写层。这个读写层再加上其下面的镜像层以及一些配置数据,就构成了一个容器。容器的这种特点加上镜像分层框架( image-layering framework), 使我们可以快速构建镜像并运行包我们自己的应用程序和服务的容器。
docker本地镜像保存在 /var/lib/docker ,容器保存在 /var/lib/docker/containers 。
总结:Docker镜像(image)就是一个只读的模板。 镜像可以用来创建Docker容器,一个镜像可以创建很多容器。
镜像分层优势
共享资源:通过引入分层技术,可以增加镜像复用度,减少磁盘占用;同时可以实现差分上传下载,加快镜像pull、push性能。
2) Docker容器
Docker利用容器(container)独立运行的一个或者一组应用。容器是利用镜像创建的运行实例(相对于Java中的类和对象的概念)。容器可以被启动、开始、停止、删除。每个容器都是互相隔离的,保证安全的平台。可以把容器看做是一个简易版的Linux环境 (包括root用户名权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎是一模一样的,也是一堆层的统一视角, 唯一区别的是容器的最上面那一层是可读可写的。
3) Repository仓库
仓库(repository)是集中存放镜像文件的场所 。最大的公开仓库是docker hub( https://hub.docker.com/), 存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等。
Docker Hub中有两种类型的仓库:用户仓库(user repository)和顶层仓库(top-level repository)。用户仓库的镜像都是由Docker用户创建的,而顶层仓库则是由Docker内部的人来管理的。
i. 用户仓库的命名由用户名和仓库名两部分组成,如:jamtur01/puppet。用户名:jamtur01,仓库名:puppet。
ii. 顶层仓库只包含仓库名部分,如ubuntu仓库。顶层仓库由Docker公司和由选定的能提供优质基础镜像的厂商(如Fedora团队提供了fedora镜像)管理,用户可以基于这些基础镜像构建自己的镜像。
仓库(repository)和仓库注册服务器(registry)是有区别的。仓库注册服务器上往往放着很多个仓库,每个仓库中又包含了很多个镜像,每个镜像有不同的标签(tag)。使用示例:仓库名:TAG号。这里仓库的概念与Git类似,registry可以理解为github这样的托管服务
三、LXC与docker的关系
LXC为Linux Container的简写。Linux Container是一种轻量级的虚拟化的手段。是一种操作系统层次上的资源的虚拟化。
docker并不是LXC替代品,docker底层使用了LXC来实现,LXC将linux进程沙盒化,使得进程之间相互隔离,并且能够控制各进程的资源分配。
在LXC的基础之上,docker提供了一系列更强大的功能。
四、容器在内核中支持2种重要技术
docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)
1)namespaces 名称空间
如果想要查看当前进程下有哪些 namespace 隔离,可以查看文件 /proc/[pid]/ns
2)control Group 控制组
cgroup的特点是:
cgroup的api以一个伪文件系统的实现方式,用户的程序可以通过文件系统实现cgroup的组件管理
cgroup的组件管理操作单元可以细粒度到线程级别,另外用户可以创建和销毁cgroup,从而实现资源载分配和再利用
所有资源管理的功能都以子系统的方式实现,接口统一子任务创建之初与其父任务处于同一个cgroup的控制组
四大功能:
资源限制:可以对任务使用的资源总额进行限制
优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级
资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
任务控制:cgroup可以对任务执行挂起、恢复等操作
Docker Note1——架构和三要素的更多相关文章
- Docker组成三要素
目录 镜像 容器 仓库 总结 Docker的基本组成三要素 镜像 容器 仓库 镜像 Docker 镜像(Image)就是一个只读的模板.镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器. ...
- 2、docker安装:内核要求、docker三要素、安装、helloworld、底层原理
1.前提说明 1.CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 2.前提条件:内 ...
- Docker架构及其三要素
1.Docker架构 a.Docker客户端和服务端 Docker是客户-服务器(C/S)架构的程序.Docker客户端只需向Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并 ...
- docker 4 docker的三要素
docker三要素 镜像,容器,仓库 镜像 docker镜像(image)就是一个只读的模板,镜像可以用来创建docker容器,一个镜像可以创建很多个容器 容器 docker利用容器(containe ...
- Docker:架构分解
17分钟快速浏览一遍 Docker内部构建 要理解Docker内部构建,需要理解以下三种部件: Docker镜像(Image) Docker容器(Container) Docker仓库(reposit ...
- 从缓存入门到并发编程三要素详解 Java中 volatile 、final 等关键字解析案例
引入高速缓存概念 在计算机在执行程序时,以指令为单位来执行,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入. 由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这 ...
- 【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/qOMO0LIdA47j3RjhbCWUEQ 作者:李 ...
- SEO基础问题:1. 关于网站的三要素你知道多少?
800x600 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 /* Style ...
- Http协议:彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
转载:http://mp.weixin.qq.com/s/uWPls0qrqJKHkHfNLmaenQ 导语 Http 缓存机制作为 web 性能优化的重要手段,对从事 Web 开发的小伙伴们来说是必 ...
随机推荐
- jadx的使用
使用jadx之前必须安装配置java环境才能正常打开运行 https://www.cnblogs.com/yhoil/p/14808648.html 一.前言 今天介绍一个非常好用的反编译的工具 ja ...
- shell的图形排列
目录 一.矩形 二.直角三角形 三.倒直角三角形 四.靠右的直角三角形 五.等腰三角形 六.平行四边形 七.等腰梯形 八.菱形 九.可变动菱形 一.矩形 二.直角三角形 三.倒直角三角形 四.靠右的直 ...
- WPF DataGrid DataGridTextColumn
Style设置时,无法绑定到数据,需要这样写 1 <DataGridTextColumn Header="呵呵" Binding="{Binding ID}&quo ...
- UI_UE在线就业-笔记
UI设计 一.字体设计的应用范围 Logo设计.平面海报.包装设计.banner设计.APP引导页.UI图标.UI界面.影视设计 二.字体的分类 衬线字体和非衬线字体之分 区别在于笔画开始与结尾地方有 ...
- Linux无法下载GCC
Linux:ping百度ping不通 因为作业需要今天使用Linux下载GCC编译器,却发生了不可预知的错误: Errors during downloading metadata for repos ...
- 【LeetCode】39. 组合总和
39. 组合总和 知识点:递归:回溯:组合:剪枝 题目描述 给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 ...
- Create Shortcut for SSH Hosts
You frequently visit host 10.0.7.141 for example. It's a waste to type "ssh gcp@10.0.7.141" ...
- 【vulhub】Weblogic CVE-2017-10271漏洞复现&&流量分析
Weblogic CVE-2017-10271 漏洞复现&&流量分析 Weblogic CVE-2017-10271 XMLDecoder反序列化 1.Weblogic-XMLDeco ...
- Nmap 简单功能介绍/TCP Header/常见端口
Nmap:Network Mapper,网络扫描和嗅探的工具包 基本功能有3个: 1.扫描主机端口,嗅探所提供的网络服务 2.探测一组主机是否在线 3.推断主机所用的操作系统,到达主机经过的路由,系统 ...
- Blazor Server 应用程序中进行 HTTP 请求
翻译自 Waqas Anwar 2021年5月4日的文章 <Making HTTP Requests in Blazor Server Apps> [1] Blazor Server 应用 ...