Minor changes on content

This commit is contained in:
Baohua Yang 2014-10-10 09:37:15 +08:00
parent 06b9651af9
commit 5a642809d9
3 changed files with 13 additions and 11 deletions

View File

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

View File

@ -1,22 +1,22 @@
## 名字空间 ## 名字空间
名字空间是Linux内核一个强大的特性。 名字空间是Linux内核一个强大的特性。每个容器都有自己单独的名字空间,运行在其中的应用都像是在独立的操作系统中运行一样。名字空间保证了容器之间彼此互不影响。
###pid 名字空间 ### pid 名字空间
不同用户的进程就是通过pid名字空间隔离开的且不同名字空间中可以有相同pid。所有的LXC进程在Docker中的父进程为Docker进程每个LXC进程具有不同的名字空间。同时由于允许嵌套因此可以很方便的实现嵌套的Docker容器。 不同用户的进程就是通过pid名字空间隔离开的且不同名字空间中可以有相同pid。所有的LXC进程在Docker中的父进程为Docker进程每个LXC进程具有不同的名字空间。同时由于允许嵌套因此可以很方便的实现嵌套的Docker容器。
###net 名字空间 ### net 名字空间
有了pid名字空间, 每个名字空间中的pid能够相互隔离但是网络端口还是共享host的端口。网络隔离是通过net名字空间实现的 每个net名字空间有独立的 网络设备, IP地址, 路由表, /proc/net 目录。这样每个容器的网络就能隔离开来。Docker默认采用veth的方式将容器中的虚拟网卡同host上的一个Docker网桥docker0连接在一起。 有了pid名字空间, 每个名字空间中的pid能够相互隔离但是网络端口还是共享host的端口。网络隔离是通过net名字空间实现的 每个net名字空间有独立的 网络设备, IP地址, 路由表, /proc/net 目录。这样每个容器的网络就能隔离开来。Docker默认采用veth的方式将容器中的虚拟网卡同host上的一个Docker网桥docker0连接在一起。
###ipc 名字空间 ### ipc 名字空间
容器中进程交互还是采用了Linux常见的进程间交互方法(interprocess communication - IPC), 包括信号量、消息队列和共享内存等。然而同 VM 不同的是容器的进程间交互实际上还是host上具有相同pid 名字空间中的进程间交互因此需要在IPC资源申请时加入名字空间信息每个IPC资源有一个唯一的32位id。 容器中进程交互还是采用了Linux常见的进程间交互方法(interprocess communication - IPC), 包括信号量、消息队列和共享内存等。然而同 VM 不同的是容器的进程间交互实际上还是host上具有相同pid 名字空间中的进程间交互因此需要在IPC资源申请时加入名字空间信息每个IPC资源有一个唯一的32位id。
###mnt 名字空间 ### mnt 名字空间
类似chroot将一个进程放到一个特定的目录执行。mnt 名字空间允许不同名字空间的进程看到的文件结构不同,这样每个名字空间 中的进程所看到的文件目录就被隔离开了。同chroot不同每个名字空间中的容器在/proc/mounts的信息只包含所在名字空间的mount point。 类似chroot将一个进程放到一个特定的目录执行。mnt 名字空间允许不同名字空间的进程看到的文件结构不同,这样每个名字空间 中的进程所看到的文件目录就被隔离开了。同chroot不同每个名字空间中的容器在/proc/mounts的信息只包含所在名字空间的mount point。
###uts 名字空间 ### uts 名字空间
UTS("UNIX Time-sharing System") 名字空间允许每个容器拥有独立的hostname和domain name, 使其在网络上可以被视作一个独立的节点而非Host上的一个进程。 UTS("UNIX Time-sharing System") 名字空间允许每个容器拥有独立的hostname和domain name, 使其在网络上可以被视作一个独立的节点而非Host上的一个进程。
###user 名字空间 ### user 名字空间
每个容器可以有不同的用户和组id, 也就是说可以在容器内用容器内部的用户执行程序而非Host上的用户。 每个容器可以有不同的用户和组id, 也就是说可以在容器内用容器内部的用户执行程序而非Host上的用户。
*注关于Linux上的名字空间[这篇文章](http://blog.scottlowe.org/2013/09/04/introducing-linux-network-namespaces/)介绍的很好。 *注关于Linux上的名字空间[这篇文章](http://blog.scottlowe.org/2013/09/04/introducing-linux-network-namespaces/)介绍的很好。

View File

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