Docker架构
为了更好的使用Docker和理解Docker中一些不常见的行为,我们最好了解在Docker表层之下的一些东西。
在下面的图片中,我们可以看到Docker安装的主要元件
中间部分是Docker daemon,负责创建,运行和监控容器,同时构建和存储镜像,Docker daemon通过docker daemon命令来运行,通常由宿主机管理。
Docker client位于右手边,用于和Docker daemon通过HTTP通信,默认情况下这主要是通过Unix domain socket通信,但是也可以使用TCP socket来让远端客户作为系统管理socket。因为所以的事情都可以通过HTTP来完成,也很容易让远端用户连接和使用开发语言来绑定,但是这也有一些实现上的指示。用于和daemon交流的API已经良好的定义和写好了文档,开发者可以直接写程序来与daemon交互而无需使用Docker client。最后,Docker client和daemon在同一个二进制里面分发。
Docker registries存储和分发镜像。默认的registry是Docker Hub,托管了成千上万的镜像。许多组织运行他们自己的registry可以用户存储金融的或敏感的镜像,或者避免了网络拥挤。 以后我们可以试着运行自己的registry。 Docker daemon会回复docker pull的请求从registry下载镜像。它也会通过docker run请求和Dockerfile中的FROM指令自动下载镜像的,前提是本地没有镜像。
底层的技术
Docker daemon使用"execution driver"来创建容器,默认,这是Docker自己的runc驱动,但是也有合法的支持LXC的去掉。Runc与下面的kernel特性联系紧密
cgroups:负责管理被容器使用的资源(例如,CPU和内存使用情况)。他们也可以负责冻结和解冻容器,被用于docker pause功能。
namespace负责隔离容器,确保容器的文件系统,主机名,网络和进程和剩余的系统隔离开来。
UFS用于存储容器的层(layers)。UFS提供一个或多个的存储驱动,例AUFS,devicemapper,BTRFS或者Overlay。
相关的技术
Docker引擎和Docker Hub没有组成一个完成的容器解决方案。许多用户会发现他们需要服务和软件,例如集群管理,服务发现工具和更的高网络性能。Docker Inc计划构建一个完全的开箱即用(out-of-the-box)的方案。也就是可替换电池战略,主要涉及到API的层次,允许元件连接Docker Engine,并且支持Docker 技术打包为一个独立的二进制,来很容易的替换第三方的等价元件。
下面包含了一些Docker支持的技术
Swarm ,Docker集群解决方案。Swarm可以为几个容器分组,允许用户把他们当做统一的资源来用
Compose 是一个工具用来构建和运行由多个Docker容器组成的应用。主要用于开发和测试而不是成产环境
Machine 安装和配置Docker主机在本地或远程资源
Kitematic 用于管理Docker 的MAC OS和windos GUI
Docker Trusted Registry 目前没开源的产品
已经有大量的第三方服务和应用和Docker相处的很好,几个解决方案也已经在下面的领域合并了
Networking Weave 和 Project Calico
Service discovery Consul, Registrator, SkyDNS, 和 etcd.
Orchestration and cluster management
Kubernetes from Google, Marathon (a frame‐ work for Mesos), CoreOS’s Fleet, and Docker’s own Swarm tooling.
当然还有其他各种各样的插件了。
共同学习,写下你的评论
评论加载中...
作者其他优质文章