Finish the basic content for the underly chapter

pull/7/head
Baohua Yang 2014-09-18 10:45:17 +08:00
parent d83e318b8c
commit b1e6415b8f
6 changed files with 35 additions and 5 deletions

View File

@ -1 +1,13 @@
#底层实现
Docker底层的核心技术包括Linux上的名字空间Namespaces、控制组Control groups、Union文件系统Union file systems和容器格式Container format Docker底层的核心技术包括Linux上的名字空间Namespaces、控制组Control groups、Union文件系统Union file systems和容器格式Container format
我们知道传统的虚拟机通过在宿主主机中运行hypervisor来模拟一整套完整的硬件环境提供给虚拟机的操作系统。虚拟机系统看到的环境是可限制的也是彼此隔离的。
这种直接的做法实现了对资源最完整的封装,但很多时候往往意味着系统资源的浪费。
例如以宿主机和虚拟机系统都为Linux系统为例虚拟机中运行的应用其实可以利用宿主机系统中的运行环境。
我们知道在操作系统中包括内核、文件系统、网络、PID、UID、IPC、内存、硬盘、CPU等等所有的资源都是应用进程直接共享的。
要想实现虚拟化除了要实现对内存、CPU、网络IO、硬盘IO、存储空间等的限制外还要实现文件系统、网络、PID、UID、IPC等等的相互隔离。
前者相对容易实现一些,后者则需要宿主机系统的深入支持。
随着Linux系统对于名字空间功能的完善实现程序员已经可以实现上面的所有需求让某些进程在彼此隔离的名字空间中运行。大家虽然都共用一个内核和某些运行时环境例如一些系统命令和系统库但是彼此却看不到都以为系统中只有自己的存在。这种机制就是容器Container例如名字空间来做权限的隔离控制利用cgroups来做资源分配。

View File

@ -1,4 +1,4 @@
##基本架构 ## 基本架构
Docker采用了C/S架构包括客户端和服务端。 Docker采用了C/S架构包括客户端和服务端。
docker daemon作为服务端接受来自客户的请求并处理这些请求创建、运行、分发容器 docker daemon作为服务端接受来自客户的请求并处理这些请求创建、运行、分发容器
客户端和服务端既可以运行在一个机器上也可通过socket或者RESTful API来进行通信。 客户端和服务端既可以运行在一个机器上也可通过socket或者RESTful API来进行通信。

View File

@ -1,3 +1,9 @@
##控制组 ## 控制组
控制组([cgroups](http://en.wikipedia.org/wiki/Cgroups)是Linux内核的一个特性主要用来隔离各个容器和宿主主机的资源利用。只有能控制分配到容器的资源才能避免当多个容器同时运行时的彼此资源竞争。
控制组技术最早是由Google的程序员2006年起提出Linux内核自2.6.24开始支持。
控制组可以提供对容器内内存、CPU、磁盘IO等资源的限制和计费管理。
主要用来隔离各个容器和宿主主机的资源利用。

View File

@ -0,0 +1,4 @@
## 容器格式
最初Docker采用了LXC中的容器格式。自1.20版本开始Docker也开始支持新的`libcontainer`格式,并作为默认选项。
对更多容器格式的支持,还在进一步的发展中。

View File

@ -1,4 +1,4 @@
##名字空间 ## 名字空间
###pid 名字空间 ###pid 名字空间
不同用户的进程就是通过pid名字空间隔离开的且不同名字空间中可以有相同pid。所有的LXC进程在Docker中的父进程为Docker进程每个LXC进程具有不同的名字空间。同时由于允许嵌套因此可以很方便的实现嵌套的Docker容器。 不同用户的进程就是通过pid名字空间隔离开的且不同名字空间中可以有相同pid。所有的LXC进程在Docker中的父进程为Docker进程每个LXC进程具有不同的名字空间。同时由于允许嵌套因此可以很方便的实现嵌套的Docker容器。
@ -16,4 +16,4 @@
UTS("UNIX Time-sharing System") 名字空间允许每个容器拥有独立的hostname和domain name, 使其在网络上可以被视作一个独立的节点而非Host上的一个进程。 UTS("UNIX Time-sharing System") 名字空间允许每个容器拥有独立的hostname和domain name, 使其在网络上可以被视作一个独立的节点而非Host上的一个进程。
###user 名字空间 ###user 名字空间
每个容器可以有不同的用户和组id, 也就是说可以在容器内用容器内部的用户执行程序而非Host上的用户。 每个容器可以有不同的用户和组id, 也就是说可以在容器内用容器内部的用户执行程序而非Host上的用户。

8
underly/ufs.md 100644
View File

@ -0,0 +1,8 @@
## Union文件系统
Union文件系统[UionFS](http://en.wikipedia.org/wiki/UnionFS))是一种特殊的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。
这样不同Docker容器就可以共享一些基础的文件系统层同时再加上自己独有的改动层大大提高了存储的效率。
Docker中使用的AUFS (AnotherUnionFS) 就是一种 Union FS。 AUFS支持为每一个成员目录(类似Git的分支)设定只读readonly、读写readwrite和写出whiteout-able权限, 同时 AUFS 里有一个类似分层的概念, 对只读权限的分支可以逻辑上进行增量地修改(不影响只读部分的)。
Docker目前支持的Union文件系统种类包括AUFS, btrfs, vfs, 和DeviceMapper。