Write paragraphs to explain why we need docker; minor grammar fix.
parent
ffc56b0aab
commit
235a80aad8
|
@ -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交互。
|
|
@ -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 也正是如此。
|
|
@ -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镜像创建的。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、安全的平台。
|
||||
即docker容器,容器是从image镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
|
||||
*image是只读的,container在启动的时候创建可写的一层作为最上层。
|
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
|
@ -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)
|
|
@ -1,2 +1,4 @@
|
|||
##更容易的部署和扩展
|
||||
对运维人员来说,最希望的就是一次配置,可以在任意环境运行。
|
||||
* docker容器可以在几乎所有的环境中运行,物理机、虚拟机、公有云、私有云、个人电脑、服务器等等。
|
||||
* docker容器兼容很多平台,这样就可以把一个应用程序从一个平台迁移到另外一个。
|
||||
* docker容器兼容很多平台,这样就可以很容易地把一个应用程序从一个平台迁移到另外一个。
|
||||
|
|
|
@ -1 +1 @@
|
|||
* 通常只需要小小的改变就可以替代以往巨型和大量的更新工作。
|
||||
* 通常只需要小小的改变就可以替代以往巨型和大量的更新工作。所有的修改以增量的方式被分发和更新,可以实现自动化并且高效的管理。
|
|
@ -1,3 +1,6 @@
|
|||
* 开发者使用一个标准的image来构建开发容器,开发完成之后,系统管理员就可以使用这个容器来部署代码。
|
||||
* docker可以快速创建容器,快速迭代应用程序,并让整个过程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。
|
||||
* docker容器很轻!很快!容器的启动时间是次秒级的,节约开发、测试、部署的时间。
|
||||
##docker可以实现快速的应用交付
|
||||
对开发人员来说,最希望的就是一次创建,可以在任意地方运行。
|
||||
对运维人员来说,最希望的就是一次配置,可以在任意环境运行。
|
||||
* 开发者可以使用一个标准的image来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。
|
||||
* docker可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。
|
||||
* docker容器很轻!很快!容器的启动时间是次秒级的,大量地节约开发、测试、部署的时间。
|
|
@ -1 +1 @@
|
|||
docker容器不需要hypervisor,他是内核级的虚拟化。
|
||||
docker容器的运行不需要额外的hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
|
Loading…
Reference in New Issue