From 235a80aad84db97e344278ed0eb645edee6d6f75 Mon Sep 17 00:00:00 2001 From: Baohua Yang Date: Thu, 11 Sep 2014 16:56:34 +0800 Subject: [PATCH] Write paragraphs to explain why we need docker; minor grammar fix. --- arch/README.md | 7 +++++-- arch/image.md | 3 ++- arch/internal.md | 10 +++++++--- images/docker.PNG | Bin 0 -> 14171 bytes images/virtualization.PNG | Bin 0 -> 16144 bytes why_use_docker/README.md | 23 ++++++++++++++++++++++- why_use_docker/easy_deployment.md | 4 +++- why_use_docker/easy_management.md | 2 +- why_use_docker/fast_deployment.md | 9 ++++++--- why_use_docker/high_efficiency.md | 2 +- 10 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 images/docker.PNG create mode 100644 images/virtualization.PNG diff --git a/arch/README.md b/arch/README.md index cc9e75c..79f0dd1 100644 --- a/arch/README.md +++ b/arch/README.md @@ -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交互。 \ No newline at end of file +Docker daemon一般在宿主主机后台运行,等待接收来自client端的消息。 +Docker client 则为用户提供一系列可执行命令,用户用这些docker命令实现跟docker daemon交互。 \ No newline at end of file diff --git a/arch/image.md b/arch/image.md index 2bb830b..22969c1 100644 --- a/arch/image.md +++ b/arch/image.md @@ -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 也正是如此。 \ No newline at end of file diff --git a/arch/internal.md b/arch/internal.md index 9e74c6d..877b8f7 100644 --- a/arch/internal.md +++ b/arch/internal.md @@ -4,10 +4,14 @@ docker有三个内部组件 * docker containers ### Docker images -docker images 就是一个只读的模板。比如:一个image可以包含一个ubuntu的操作系统,里面安装了apache或者你需要的应用程序。images可以用来创建docker containers,docker提供了一个很简单的机制来创建images或者更新现有的images,你甚至可以直接从其他人那里下载一个已经做好的images +docker images 就是一个只读的模板。比如:一个image可以包含一个完整的ubuntu的操作系统,里面仅安装了apache或者你需要的其它应用程序。 +images可以用来创建docker containers,docker提供了一个很简单的机制来创建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镜像创建的。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、安全的平台。 \ No newline at end of file +即docker容器,容器是从image镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。 +*image是只读的,container在启动的时候创建可写的一层作为最上层。 \ No newline at end of file diff --git a/images/docker.PNG b/images/docker.PNG new file mode 100644 index 0000000000000000000000000000000000000000..5c1a41d44b8602c8f746e8929f484a701869ca25 GIT binary patch literal 14171 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

    SSbe0R(uMaKDhrU1{~_lS#`5Q}r5 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 literal 0 HcmV?d00001 diff --git a/why_use_docker/README.md b/why_use_docker/README.md index f48bee7..d08bfe8 100644 --- a/why_use_docker/README.md +++ b/why_use_docker/README.md @@ -1 +1,22 @@ -#为什么使用Docker \ No newline at end of file +#为什么使用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) \ No newline at end of file diff --git a/why_use_docker/easy_deployment.md b/why_use_docker/easy_deployment.md index d95561b..dfbf544 100644 --- a/why_use_docker/easy_deployment.md +++ b/why_use_docker/easy_deployment.md @@ -1,2 +1,4 @@ +##更容易的部署和扩展 +对运维人员来说,最希望的就是一次配置,可以在任意环境运行。 * docker容器可以在几乎所有的环境中运行,物理机、虚拟机、公有云、私有云、个人电脑、服务器等等。 -* docker容器兼容很多平台,这样就可以把一个应用程序从一个平台迁移到另外一个。 +* docker容器兼容很多平台,这样就可以很容易地把一个应用程序从一个平台迁移到另外一个。 diff --git a/why_use_docker/easy_management.md b/why_use_docker/easy_management.md index f133f5f..86a477b 100644 --- a/why_use_docker/easy_management.md +++ b/why_use_docker/easy_management.md @@ -1 +1 @@ -* 通常只需要小小的改变就可以替代以往巨型和大量的更新工作。 \ No newline at end of file +* 通常只需要小小的改变就可以替代以往巨型和大量的更新工作。所有的修改以增量的方式被分发和更新,可以实现自动化并且高效的管理。 \ No newline at end of file diff --git a/why_use_docker/fast_deployment.md b/why_use_docker/fast_deployment.md index 07219dd..074a8f6 100644 --- a/why_use_docker/fast_deployment.md +++ b/why_use_docker/fast_deployment.md @@ -1,3 +1,6 @@ -* 开发者使用一个标准的image来构建开发容器,开发完成之后,系统管理员就可以使用这个容器来部署代码。 -* docker可以快速创建容器,快速迭代应用程序,并让整个过程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 -* docker容器很轻!很快!容器的启动时间是次秒级的,节约开发、测试、部署的时间。 \ No newline at end of file +##docker可以实现快速的应用交付 +对开发人员来说,最希望的就是一次创建,可以在任意地方运行。 +对运维人员来说,最希望的就是一次配置,可以在任意环境运行。 +* 开发者可以使用一个标准的image来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 +* docker可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 +* docker容器很轻!很快!容器的启动时间是次秒级的,大量地节约开发、测试、部署的时间。 \ No newline at end of file diff --git a/why_use_docker/high_efficiency.md b/why_use_docker/high_efficiency.md index 11d7899..fe44550 100644 --- a/why_use_docker/high_efficiency.md +++ b/why_use_docker/high_efficiency.md @@ -1 +1 @@ -docker容器不需要hypervisor,他是内核级的虚拟化。 \ No newline at end of file +docker容器的运行不需要额外的hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。 \ No newline at end of file