Write paragraphs to explain why we need docker; minor grammar fix.

This commit is contained in:
Baohua Yang 2014-09-11 16:56:34 +08:00
parent ffc56b0aab
commit 235a80aad8
10 changed files with 47 additions and 13 deletions

View File

@ -1,7 +1,10 @@
#架构
docker使用C/S架构docker daemon作为server端接受client的请求并处理创建、运行、分发容器他们可以运行在一个机器上也通过sockerts或者RESTful API通信。
docker采用了C/S架构包括client端和daemon端。
docker daemon作为server端接受来自client的请求并处理这些请求创建、运行、分发容器
client端和server端既可以运行在一个机器上也可通过socket或者RESTful API来进行通信。
![Docker基本架构](../images/docker_arch.png)
Docker daemon一般在宿主主机后台运行用户使用client而直接跟daemon交互。Docker client 以系统做bin命令的形式存在用户用docker命令来跟docker daemon交互。
Docker daemon一般在宿主主机后台运行等待接收来自client端的消息。
Docker client 则为用户提供一系列可执行命令用户用这些docker命令实现跟docker daemon交互。

View File

@ -1,3 +1,4 @@
每个docker都有很多层次构成docker使用 union file systems 将这些不同的层结合到一个image中去。
docker image是怎么实现增量的修改和维护的
每个docker都有很多层次构成docker使用 Union File Systems 将这些不同的层结合到一个image中去。
AUFS (AnotherUnionFS) 是一种 Union FS, 简单来说就是支持将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)的文件系统, 更进一步的理解, AUFS支持为每一个成员目录(类似Git Branch)设定readonly、readwrite 和 whiteout-able 权限, 同时 AUFS 里有一个类似分层的概念, 对 readonly 权限的 branch 可以逻辑上进行修改(增量地, 不影响 readonly 部分的)。通常 Union FS 有两个用途, 一方面可以实现不借助 LVM、RAID 将多个disk挂到同一个目录下, 另一个更常用的就是将一个 readonly 的 branch 和一个 writeable 的 branch 联合在一起Live CD正是基于此方法可以允许在 OS image 不变的基础上允许用户在其上进行一些写操作。Docker 在 AUFS 上构建的 container image 也正是如此。

View File

@ -4,10 +4,14 @@ docker有三个内部组件
* docker containers
### Docker images
docker images 就是一个只读的模板。比如一个image可以包含一个ubuntu的操作系统里面安装了apache或者你需要的应用程序。images可以用来创建docker containersdocker提供了一个很简单的机制来创建images或者更新现有的images你甚至可以直接从其他人那里下载一个已经做好的images
docker images 就是一个只读的模板。比如一个image可以包含一个完整的ubuntu的操作系统里面仅安装了apache或者你需要的其它应用程序。
images可以用来创建docker containersdocker提供了一个很简单的机制来创建images或者更新现有的images你甚至可以直接从其他人那里下载一个已经做好的images来直接使用。
###Docker registries
Docker registries 也叫docker 仓库它有公有仓库和私有仓库2种形式他们都可以用来让你上传和下载images。公有的仓库也叫 Docker Hub。它提供了一个巨大的image库可以让你下载你也可以在自己的局域网内建一个自己的私有仓库。
Docker registries 也叫docker仓库它有公有仓库和私有仓库2种形式他们都可以用来让你上传和下载images。公有的仓库即[Docker Hub](https://hub.docker.com)提供了一个数量庞大的image库供用户下载。当然你也可以在自己的局域网内建一个自己的私有仓库。
*从这个意义上看Docker Hub的功能跟GitHub类似。
###Docker containers
Docker containers也叫docker容器容器是从image镜像创建的。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、安全的平台。
即docker容器容器是从image镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
*image是只读的container在启动的时候创建可写的一层作为最上层。

BIN
images/docker.PNG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
images/virtualization.PNG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1 +1,22 @@
#为什么使用Docker
#为什么使用Docker
为什么要使用docker
作为一种新兴的虚拟化方式docker跟传统的虚拟化方式相比具有众多的优势。
docker的基础是Linux Container LXC
首先我们来看Linux Container的发展过程。
我们知道传统的虚拟机通过在宿主主机中运行hypervisor来模拟一整套完整的硬件环境提供给虚拟机系统。虚拟机系统看到的环境是可限制的也是彼此隔离的。
这种直接的做法实现了对资源最完整的封装,但很多时候往往意味着系统资源的浪费。
例如以宿主机和虚拟机系统都为Linux系统为例虚拟机中运行的应用其实可以利用宿主机系统中的运行环境。
我们知道在操作系统中包括内核、文件系统、网络、PID、UID、IPC、内存、硬盘、CPU等等所有的资源都是应用进程直接共享的。
要想实现虚拟化除了要实现对内存、CPU、网络IO、硬盘IO、存储空间等的限制外还要实现文件系统、网络、PID、UID、IPC等等的相互隔离。
前者相对容易实现一些,后者则需要宿主机系统的深入支持。
随着Linux系统对于名字空间功能的完善实现程序员已经可以实现上面的所有需求让某些进程在彼此隔离的名字空间中运行。大家虽然都共用一个内核和某些运行时环境例如一些系统命令和系统库但是彼此却看不到都以为系统中只有自己的存在。这种机制就是Container容器
而docker正是在容器的基础上进行了进一步的封装让用户不需要去关心容器的管理使得操作更为简便。
下面的图片比较了docker之所以能胜出传统虚拟化方式的原因。
![传统虚拟化](../images/virtualization.png)
![Docker](../images/docker.png)

View File

@ -1,2 +1,4 @@
##更容易的部署和扩展
对运维人员来说,最希望的就是一次配置,可以在任意环境运行。
* docker容器可以在几乎所有的环境中运行物理机、虚拟机、公有云、私有云、个人电脑、服务器等等。
* docker容器兼容很多平台这样就可以把一个应用程序从一个平台迁移到另外一个。
* docker容器兼容很多平台这样就可以很容易地把一个应用程序从一个平台迁移到另外一个。

View File

@ -1 +1 @@
* 通常只需要小小的改变就可以替代以往巨型和大量的更新工作。
* 通常只需要小小的改变就可以替代以往巨型和大量的更新工作。所有的修改以增量的方式被分发和更新,可以实现自动化并且高效的管理。

View File

@ -1,3 +1,6 @@
* 开发者使用一个标准的image来构建开发容器开发完成之后系统管理员就可以使用这个容器来部署代码。
* docker可以快速创建容器快速迭代应用程序并让整个过程可见使团队中的其他成员更容易理解应用程序是如何创建和工作的。
* docker容器很轻很快容器的启动时间是次秒级的节约开发、测试、部署的时间。
##docker可以实现快速的应用交付
对开发人员来说,最希望的就是一次创建,可以在任意地方运行。
对运维人员来说,最希望的就是一次配置,可以在任意环境运行。
* 开发者可以使用一个标准的image来构建一套开发容器开发完成之后运维人员可以直接使用这个容器来部署代码。
* docker可以快速创建容器快速迭代应用程序并让整个过程全程可见使团队中的其他成员更容易理解应用程序是如何创建和工作的。
* docker容器很轻很快容器的启动时间是次秒级的大量地节约开发、测试、部署的时间。

View File

@ -1 +1 @@
docker容器不需要hypervisor他是内核级的虚拟化
docker容器的运行不需要额外的hypervisor支持它是内核级的虚拟化因此可以实现更高的性能和效率