Docker公司发明的「容器镜像」技术,创造性地解决了应用打包的难题。改变了一大批诸如容器编排、服务网格和云原生等技术,深刻影响了云计算领域的技术方向。
一、Docker 容器技术
概括起来,Docker 容器技术有3个核心概念容器、镜像和镜像仓库。如果把容器类比为动态的、有生命周期的进程,则镜像就像是静态的可执行程序及其运行环境的打包文件,而镜像仓库则可想象成应用程序分发仓库,事先存储了制作好的各类镜像文件。
运行Docker守护进程(daemon)的主机称为Docker主机,它提供了容器引擎并负责管理本地容器的生命周期,而容器的创建则要基于本地存储的Docker镜像进行,当本地缺失所需的镜像时,由守护进程负责到Docker Registry获取。Docker命令行客户端通过Docker守护进程提供的API与其交互,用于容器和镜像等的对象管理操作。Docker各组件间的逻辑架构及交互关系如图1所示。
任何拥有Docker运行时引擎的主机都能够根据同一个镜像创建并启动运行环境完全一致的容器,在容器中添加新数据或修改现有数据的结果都存储在由容器附加在镜像之上的可写顶层中。因此,同一 Docker 主机上的多个容器可以共享同一基础镜像,但各有自己的数据状态。
二、容器编排系统
Docker本身非常适合管理单个容器,若运行的是构建于有限几个或十几个容器上的应用程序,则可以仅在 Docker引擎上自主运行,部署和管理这些容器并不会遇到太大的困难。然而,对于包含成百上千个容器的企业级应用程序来说,这种管理将变得极其复杂,甚至无法实现。
容器编排是指自动化容器应用的部署、管理、扩展和联网的一系列管控操作,能够控制和自动化许多任务,包括调度和部署容器、在容器之间分配资源、扩缩容器应用规模、在主机不可用或资源不足时将容器从一台主机迁移到其他主机、负载均衡以及监视容器和主机的运行状况等。
容器编排系统用于完成容器编排相关的任务。以Kubernetes、Mesos 和 Docker Swarm 等为代表的这类工具通常需要用户在 YAML 或 JSON 格式的配置清单中描述应用程序的配置,以指示编排系统在何处检索容器镜像、如何在容器之间建立网络、在何处存储日志以及如何挂载存储卷等。确定调度目标后,编排工具将根据预定规范管理容器的生命周期。
概括来说,容器编排系统能够为用户提供如下关键能力。
■ 集群管理与基础设施抽象将多个虚拟机或物理机构建成协同运行的集群,并将这些硬件基础设施抽象为一个统一的资源池。
■ 资源分配和优化基于配置清单中指定的资源需求与现实可用的资源量,利用成熟的调度算法合理调度工作负载。
■ 应用部署支持跨主机自动部署容器化应用,支持多版本并存、滚动更新和回滚等机制。
■ 应用伸缩支持应用实例规模的自动或手动伸缩。
■应用隔离∶支持为租户、项目或应用进行访问隔离。
■服务可用性∶利用状态监测和应用重构等机制确保服务始终健康运行。