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 0000000..5c1a41d Binary files /dev/null and b/images/docker.PNG differ diff --git a/images/virtualization.PNG b/images/virtualization.PNG new file mode 100644 index 0000000..6e94771 Binary files /dev/null and b/images/virtualization.PNG differ 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