The Docker platform
Docker提供可以在一个松隔离的环境中封装和运行应用的能力,这个松隔离的环境被成为container。隔离和安全允许你在同一台host同时运行多个container。Container是轻量级的,因为他们不需要额外加载管理者,而是直接在宿主机的内核上运行。这意味着相对于使用虚拟机而言,你可以在一套硬件设备上运行更多的container。你甚至可以使用虚拟机作为宿主机,并在上面运行多个container。
Docker提供工具和一个平台来管理container的生命周期:
- 使用container开发应用和支持它的组件。
- container成为分割应用和测试应用的单元。
- 当你准备好后,使用container或一组协调工作的service来将应用部署到生产环境。无论你的生产环境是本地数据中心、云服务提供者还是二者混合,所产生的效果是一样的。
Docker Engine
Docker Engine是一个客户端-服务端(C/S)应用,它具备以下几个主要组件:
- 一个长期运行的守护进程类型的服务(the dockerd command)
- 一套REST API,用于指定程序访问docker daemon并为其提供指令。
-
一个控制台客户端(command line interface, CLI)(the docker command)
Docker Engine
客户端控制台(CLI)使用Docker REST API通过脚本或CLI命令来控制或影响Docker daemon。
Docker daemon创建并管理Docker对象(Docker objects),如镜像(images),容器(containers),网络(networks),数据卷(volumes)。
Docker架构
Docker使用C/S架构。Docker Client(客户端)访问Docker Daemon(服务端),Docker daemon负责创建、运行、分割Docker container。
Docker Client和Docker Daemon可以在同一个系统下运行,也可以使用Docker Client远程连接Docker daemon。client和daemon通过REST API访问。
Docker架构
The Docker daemon
Docker daemon(dockerd)监听Docker API请求并管理Docker对象,如image,container,network,volume。daemon也可以访问其他daemon来管理docker service。
The Docker Client
Docker client(docker)是用户用于影响Docker的私有方式。当你使用Docker命令如docker run
,client发送这些命令到dockerd服务,并由dockerd服务执行。docker
命令使用Docker API。Docker client可以访问多个daemon。
Docker registries(Docker注册中心)
Docker registries存储Docker image。Docker Hub和Docker Cloud是对所有人开放的注册中心,并且Docker默认向DockerHub索取image。你可以建立私有注册中心。如果使用Docker Datacenter (DDC),它包含了Docker Trusted Registry (DTR)。
当使用docker pull
或者docker run
命令时,所需要的image会从配置好的注册中心中拉取下来。当使用docker push
命令时,image推送到注册中心。
你可以通过pull新版本的image并重新部署container来升级应用。
Docker objects
当你使用Docker时,你就在创建并使用image、container、network、volumes、plugin等对象。
镜像(IMAGE)
image是一个集成用于创建Docker container指令的只读的模版。通常情况下,一个image是基于另一个image,并添加一些额外的配置而来。
你可以自己创建image或者仅仅是从注册中心获取image并使用。
创建image
创建Dockerfile文件。该文件使用一些简单的语法来定义创建镜像所需要的步骤,并执行这些步骤。
Dockerfile中的每条指令会在image中创建一个新的层(layer)。
当你改变Dockerfile并重新创建image时,仅仅重建那些有变动的层。
容器(CONTAINERS)
容器是一个镜像的可执行实例。
你可以使用Docker API或CLI创建、启动、停止、移动和删除container。
你可以将一个container连接至一个和多个网络、向其附加存储器,也可以基于container的当前状态创建一个新的image。
默认情况下,一个container相对于其他container和它的host machine是隔离的。你可以控制怎样隔离container的网络、存储,或者来自其他container和来自host machine的底层系统。
container由它的image和创建或启动container时提供的配置项定义的。当一个container移除时,任何没存保存在持久化存储中的状态的更改都将丢失。
服务(SERVICE)
service允许跨多个Docker daemon扩展容器,他们将成为一个swarm,且拥有多个manager和worker。swarm中的每个成员都是一个Docker daemon,并且daemon都通过Docker API互相访问。
service允许你定义期望的状态,比如service在某一时间所需要运行的副本数量。
默认情况下,service的所有worker节点是负载均衡的。对于消费者来说,Docker service看上去就像一个应用一样。