11** 本文只是对Docker的概念做了较为详细的介绍,并不涉及一些像Docker环境的安装以及Docker的一些常见操作和命令。**
22
3- <!-- TOC -->
4-
5- - [ 一 先从认识容器开始] ( #一-先从认识容器开始 )
6- - [ 1.1 什么是容器?] ( #11-什么是容器 )
7- - [ 先来看看容器较为官方的解释] ( #先来看看容器较为官方的解释 )
8- - [ 再来看看容器较为通俗的解释] ( #再来看看容器较为通俗的解释 )
9- - [ 1.2 图解物理机,虚拟机与容器] ( #12-图解物理机虚拟机与容器 )
10- - [ 二 再来谈谈 Docker 的一些概念] ( #二-再来谈谈-docker-的一些概念 )
11- - [ 2.1 什么是 Docker?] ( #21-什么是-docker )
12- - [ 2.2 Docker 思想] ( #22-docker-思想 )
13- - [ 2.3 Docker 容器的特点] ( #23-docker-容器的特点 )
14- - [ 2.4 为什么要用 Docker ?] ( #24-为什么要用-docker- )
15- - [ 三 容器 VS 虚拟机] ( #三-容器-vs-虚拟机 )
16- - [ 3.1 两者对比图] ( #31-两者对比图 )
17- - [ 3.2 容器与虚拟机总结] ( #32-容器与虚拟机总结 )
18- - [ 3.3 容器与虚拟机两者是可以共存的] ( #33-容器与虚拟机两者是可以共存的 )
19- - [ 四 Docker基本概念] ( #四-docker基本概念 )
20- - [ 4.1 镜像(Image):一个特殊的文件系统] ( #41-镜像image一个特殊的文件系统 )
21- - [ 4.2 容器(Container):镜像运行时的实体] ( #42-容器container镜像运行时的实体 )
22- - [ 4.3仓库(Repository):集中存放镜像文件的地方] ( #43仓库repository集中存放镜像文件的地方 )
23- - [ 五 最后谈谈: Build Ship and Run] ( #五-最后谈谈build-ship-and-run )
24- - [ 六 总结] ( #六-总结 )
25-
26- <!-- /TOC -->
27-
28- > ** Docker 是世界领先的软件容器平台** ,所以想要搞懂Docker的概念我们必须先从容器开始说起。
29-
30- ## 一 先从认识容器开始
3+ ## 一 认识容器
4+
5+ ** Docker 是世界领先的软件容器平台** ,所以想要搞懂Docker的概念我们必须先从容器开始说起。
316
327### 1.1 什么是容器?
338
6439
6540---
6641
67- > 相信通过上面的解释大家对于容器这个既陌生又熟悉的概念有了一个初步的认识,下面我们就来谈谈Docker的一些概念。
42+ ** 相信通过上面的解释大家对于容器这个既陌生又熟悉的概念有了一个初步的认识,下面我们就来谈谈Docker的一些概念。**
6843
6944## 二 再来谈谈 Docker 的一些概念
7045
11186
11287---
11388
114- > 每当说起容器,我们不得不将其与虚拟机做一个比较。就我而言,对于两者无所谓谁会取代谁,而是两者可以和谐共存。
89+ ** 每当说起容器,我们不得不将其与虚拟机做一个比较。就我而言,对于两者无所谓谁会取代谁,而是两者可以和谐共存。**
11590
11691## 三 容器 VS 虚拟机
11792
141116
142117---
143118
144- > Docker中非常重要的三个基本概念,理解了这三个概念,就理解了 Docker 的整个生命周期。
145-
146119## 四 Docker基本概念
147120
148- Docker 包括三个基本概念
121+ ** Docker中有非常重要的三个基本概念,理解了这三个概念,就理解了 Docker 的整个生命周期。 **
149122
150123- ** 镜像(Image)**
151124- ** 容器(Container)**
@@ -178,7 +151,7 @@ Docker 包括三个基本概念
178151 按照 Docker 最佳实践的要求,** 容器不应该向其存储层内写入任何数据** ,容器存储层要保持无状态化。** 所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录** ,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, ** 使用数据卷后,容器可以随意删除、重新 run ,数据却不会丢失。**
179152
180153
181- ### 4.3仓库 (Repository):集中存放镜像文件的地方
154+ ### 4.3 仓库 (Repository):集中存放镜像文件的地方
182155
183156 镜像构建完成后,可以很容易的在当前宿主上运行,但是, ** 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。**
184157
@@ -196,7 +169,7 @@ Docker 包括三个基本概念
196169
197170---
198171
199- > Docker的概念基本上已经讲完,最后我们谈谈:Build, Ship, and Run。
172+ ** Docker的概念基本上已经讲完,最后我们谈谈:Build, Ship, and Run。**
200173
201174## 五 最后谈谈: Build Ship and Run
202175如果你搜索Docker官网,会发现如下的字样:** “Docker - Build, Ship, and Run Any App, Anywhere”** 。那么Build, Ship, and Run到底是在干什么呢?
@@ -209,13 +182,40 @@ Docker 包括三个基本概念
209182
210183** Docker 运行过程也就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器。所以,我们也常常将Docker称为码头工人或码头装卸工,这和Docker的中文翻译搬运工人如出一辙。**
211184
212- ## 六 总结
185+ ### 七 简单了解一下Docker底层原理
213186
214- 本文主要把Docker中的一些常见概念做了详细的阐述,但是并不涉及Docker的安装、镜像的使用、容器的操作等内容。这部分东西,希望读者自己可以通过阅读书籍与官方文档的形式掌握。如果觉得官方文档阅读起来很费力的话,这里推荐一本书籍《Docker技术入门与实战第二版》。
187+ Docker 技术是基于 LXC(Linux container- Linux容器)虚拟容器技术的。
188+
189+ > LXC,其名称来自Linux软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system–level virtualization)技术,为 Linux 内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。通过统一的名字空间和共用 API 来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得Linux用户可以容易的创建和管理系统或应用容器。
190+
191+ LXC 技术主要是借助Linux内核中提供的CGroup功能和 name space 来实现的,通过 LXC 可以为软件提供一个独立的操作系统运行环境。
192+
193+ ** cgroup 和 namespace 介绍:**
194+
195+ - ** namespace 是 Linux 内核用来隔离内核资源的方式。** 通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程的相关资源指定在同一个 namespace 中。Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。
215196
197+ (以上关于 namespace 介绍内容来自https://www.cnblogs.com/sparkdev/p/9365405.html ,更多关于namespace 的呢内容可以查看这篇文章 )。
216198
199+ - ** CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组 (process groups) 所使用的物力资源 (如 cpu memory i/o 等等) 的机制。**
200+
201+ (以上关于 CGroup 介绍内容来自 https://www.ibm.com/developerworks/cn/linux/1506_cgroup/index.html ,更多关于CGroup 的呢内容可以查看这篇文章 )。
202+
203+ ** cgroup 和 namespace 两者对比:**
204+
205+ 两者都是将进程进行分组,但是两者的作用还是有本质区别。namespace是为了隔离进程组之间的资源,而cgroup是为了对一组进程进行统一的资源监控和限制。
206+
207+ ## 八 总结
208+
209+ 本文主要把Docker中的一些常见概念做了详细的阐述,但是并不涉及Docker的安装、镜像的使用、容器的操作等内容。这部分东西,希望读者自己可以通过阅读书籍与官方文档的形式掌握。如果觉得官方文档阅读起来很费力的话,这里推荐一本书籍《Docker技术入门与实战第二版》。
217210
211+ ## 九 推荐阅读
218212
213+ - [ 10分钟看懂Docker和K8S] ( https://zhuanlan.zhihu.com/p/53260098 )
214+ - [ 从零开始入门 K8s:详解 K8s 容器基本概念] ( https://www.infoq.cn/article/te70FlSyxhltL1Cr7gzM )
219215
216+ ## 十 参考
220217
218+ - [ Linux Namespace和Cgroup] ( https://segmentfault.com/a/1190000009732550 )
219+ - [ LXC vs Docker: Why Docker is Better] ( https://www.upguard.com/articles/docker-vs-lxc )
220+ - [ CGroup 介绍、应用实例及原理描述] ( https://www.ibm.com/developerworks/cn/linux/1506_cgroup/index.html )
221221
0 commit comments