文章目录

  • 一、核心技术
  • 二、平台技术
  • 三、支持技术


本文结构如下:

docker eng_容器

一、核心技术

容器核心技术是指能够让Container在host上运行起来的那些技术。

docker eng_运维_02

(1)容器规范

容器不光是Docker,还有其他容器,比如CoreOS的rkt。为了保证容器生态的健康发展,保证不同容器之间能够兼容,包含Docker、CoreOS、Google在内的若干公司共同成立了一个叫Open Container Initiative(OCI)的组织,其目的是制定开放的容器规范。目前OCI发布了两个规范:runtime spec和image format spec。有了这两个规范,不同组织和厂商开发的容器能够在不同的runtime上运行。这样就保证了容器的可移植性和互操作性。

(2)容器runtime

Java程序就好比是容器,JVM则好比是runtime, JVM为Java程序提供运行环境。同样的道理,容器只有在runtime中才能运行。

lxc、runc和rkt是目前主流的三种容器runtime。
lxc是Linux上老牌的容器runtime。Docker最初也是用lxc作为runtime。runc是Docker自己开发的容器runtime,符合oci规范,也是现在Docker的默认runtime。rkt是CoreOS开发的容器runtime,符合OCI规范,因而能够运行Docker的容器。

(3)容器管理工具

光有runtime还不够,用户得有工具来管理容器。容器管理工具对内与runtime交互,对外为用户提供interface,比如CLI。这就好比除了JVM,还得提供Java命令让用户能够启停应用。

lxd是lxc对应的管理工具。runc的管理工具是docker engine。docker engine包含后台deamon和cli两个部分。我们通常提到Docker,一般就是指的docker engine。rkt的管理工具是rkt cli。

(4)容器定义工具

容器定义工具允许用户定义容器的内容和属性,这样容器就能够被保存、共享和重建。

docker image是Docker容器的模板,runtime依据docker image创建容器。dockerfile是包含若干命令的文本文件,可以通过这些命令创建出docker image。ACI(App Container Image)与docker image类似,只不过它是由CoreOS开发的rkt容器的image格式。

(5)Registry

容器是通过image创建的,需要有一个仓库来统一存放image,这个仓库就叫做Registry。

企业可以用Docker Registry构建私有的Registry。Docker Hub(https://hub.docker.com)是Docker为公众提供的托管Registry,上面有很多现成的image,为Docker用户提供了极大的便利。Quay.io(https://quay.io/)是另一个公共托管Registry,提供与Docker Hub类似的服务。

(6)容器OS

由于有容器runtime,几乎所有的Linux、MAC OS和Windows都可以运行容器,但这并没有妨碍容器OS的问世。容器OS是专门运行容器的操作系统。与常规OS相比,容器OS通常体积更小,启动更快。因为是为容器定制的OS,通常它们运行容器的效率会更高。

二、平台技术

容器核心技术使得容器能够在单个主机上运行,而容器平台技术能够让容器作为集群在分布式环境中运行。

docker eng_docker eng_03

(1)容器编排引擎

一个基于微服务架构的应用系统实际上是一个动态的可伸缩的系统。这对我们的部署环境提出了新的要求,我们需要有一种高效的方法来管理容器集群。而这,就是容器编排引擎要干的工作。

docker swarm是Docker开发的容器编排引擎。
kubernetes是Google领导开发的开源容器编排引擎,同时支持Docker和CoreOS容器。
mesos是一个通用的集群资源调度平台,mesos与marathon一起提供容器编排引擎功能。

(2)容器管理平台

容器管理平台是架构在容器编排引擎之上的一个更为通用的平台。通常容器管理平台能够支持多种编排引擎,抽象了编排引擎的底层实现细节,为用户提供更方便的功能。

Rancher和ContainerShip是容器管理平台的典型代表。

(3)基于容器的PaaS

基于容器的PaaS为微服务应用开发人员和公司提供了开发、部署和管理应用的平台,使用户不必关心底层基础设施而专注于应用的开发。

Deis、Flynn和Dokku都是开源容器PaaS的代表。

三、支持技术

docker eng_运维_04

(1)容器网络

docker network是Docker原生的网络解决方案。除此之外,我们还可以采用第三方开源解决方案,例如flannel、weave和calico。

(2)服务发现

动态变化是微服务应用的一大特点。当负载增加时,集群会自动创建新的容器;负载减小,多余的容器会被销毁。容器也会根据host的资源使用情况在不同host中迁移,容器的IP和端口也会随之发生变化。在这种动态的环境下,必须要有一种机制让client能够知道如何访问容器提供的服务。这就是服务发现技术要完成的工作。

etcd、consul和zookeeper是服务发现的典型解决方案。

(3)监控

docker ps/top/stats是Docker原生的命令行监控工具。

除了命令行,Docker也提供了stats API,用户可以通过HTTP请求获取容器的状态信息。

sysdig、cAdvisor/Heapster和Weave Scope是其他开源的容器监控方案。

(4)数据管理

Rex-Ray能让容器数据保证持久化数据,以及实现容器之间的数据动态迁移。

(5)日志管理

docker logs是Docker原生的日志工具。而logspout对日志提供了路由功能,它可以收集不同容器的日志并转发给其他工具进行后处理。

(6)安全性

OpenSCAP是一种容器安全工具,能够对容器镜像进行扫描,发现潜在的漏洞。