What is Docker?
Docker 是一个开源的平台,设计目标是可以方便开发,方便部署和方便执行应用。使用docker可以快速分发开发好的应用。借助于Docker,你可以将开发平台和应用分离开,并且像管理应用一样管理开发平台。Docker可以帮助你快速开发应用,快速测试应用,快速部署应用,并且缩短开发代码和执行代码之间的周期间隔。
Docker 是凭借一个轻量级容器的虚拟化平台工作流和相关工具来达到上述功能的,并且使用这个轻量化容器来帮助你管理和部署应用。
在Docker核心层,它提供了一种方式来让各种应用运行在各个隔离的容器中。这种方式允许docker同一时间在同一台主机上面运行若干个容器。这种轻量级的容器运行方式,几乎没有额外的运行开销。这意味着你可以充分使用主句的硬件能力。
使用Docker提供的工具和虚拟化平台,你可以完成以下事情:
1、将你的应用或者组件部署到容器中。
2、将你的容器分发给你的团队进行下一步的开发或者测试
3、将你开发的应用部署到发布环境中,无论这些环境是本地模式或者云模式。
What can I use Docker for?
1、快速分发应用
Docker可以帮助你把控开发各个周期。Docker允许你在本地的开发环境中进行代码开发,然后将开发好的应用整合到团队的开发流程中。
比如:你可以再本地编写代码,当编写完成后。你将代码开发堆栈信息共享给团队成员。当他们也编写完成后,同样共享开发堆栈信息。然后再测试环境中,使用团队共享的开发堆栈就可以进行所需要的测试了。当完成测试后,团队就可以将测试通过的docker镜像(images)发布到产品环境中。
2、方便部署和易于管理
Docker基于容器的机制可以很容易进行部署。Docker容器可以在本地主机上面执行,也可以在虚拟机中执行,不论这些虚拟机是在本地或者云中。
Docker快速部署和轻量级的特性也使得管理负载变得很容易。你可以快速启动或者销毁容器。这种时间几乎是实时的。
3、可以执行大量的工作负载
因为Docker具有便于部署和快速启停的方式,同时docker也提供了可行的,符合效益-成本的虚拟机管理机制。使得docker很适合负载要求高的环境。比如:将你的云平台作为PAAS用途时,或者你要求你的环境具有高资源使用率时。
What are the major Docker components?
Docker主要有两个组件:
Docker:开源的容器虚拟化平台
Docker Hub:一个Software-as-a-Service平台,用来共享和管理docker容器。
What is Docker's architecture?
Docker采取的C-S结构。Docker client同Docker daemon通讯,Docker daemon负责维护docker 容器的构建,运行和分发。
Client和Daemon可以再同一台主机上面执行,也可以分开执行。本地的client可以连接远程的daemon。Client可以通过socker或者REST API同daemon通讯。
The Docker daemon
如上图所示,daemon在主机上面执行。用户只能通过client同daemon通讯。
The Docker client
Docker client是用户与Docker之间的重要接口。它从用户那里接受命令,并且将daemon的返回数据展现出来。
How does a Docker registry work?
Docker registry是用来保存images的。当你新建好image后,就可以将image上传到Dock Hub或者你私有的store中。
借助于Docker client,你可以在Dock Hub检索你所需的image,同时将这些image下载到本地。
同时Dock Hub也提供公开和私有两种模式,处于公开模式下的image,所有人都可以下载和使用这些image。而处于私有模式下的image,只有本人或者经过授权后的人才能下载并且使用这些image。
How does a container work?
一个标准容器包括:操作系统,用户自定义的文件和原数据。正如我们所知的那样,每个容器都是由image所创建的。image告诉docker,这个容器运行时,应该有哪些进程和应该有哪些配置参数。因为image是只读的,所以容器在运行时会在image原有层的基础上面创建一些可读可写的新层。而你的应用运行所需的数据将会被记录到这些数据层中。
What happens when you run a container?
不论是使用docker程序或者API,docker client都会通知docker daemon如何操作容器。
当我们执行如下命令时:
The uts namespace: 用来隔离内核和版本信息(UTS,分时复用系统 Unix Timesharing System)
Control groups
Docker同时也采用了一种称之为"cgroups"的技术来控制group。不同应用之间隔离的关键在于,每个应用只能访问属于自己的资源。这样才能确保主机上面同时存在多个用户。Cgroups可以确保docker将可用的硬件资源共享给所有容器,并且可以在必要时间,对容器限制硬件资源。例如可以限制每个容器可以访问的内存容量。
Union file systems
Union file systems 或者称为"UnionFS"是docker在创建层时采用的文件系统。这种文件系统使docker变得很轻量级并且执行速度很快。Docker使用UnionFS为容器提供相对应的数据块(data blocks)。Docker可以使用多种类型的UnionFS,比如:AUFS, btrfs, vfs, and DeviceMapper.
Container format
Docker将上面我们所描述的各种组件封装成container数据类型(我们就称其为容器)。默认的容器类型是libcontainer。Docker同样也支持传统Linux使用LXC实现的容器类型。再未来,Docker也将支持其他类型的容器,比如:BSD Jails 或者Solaris Zones 版本的容器类型。