探索中国CIO人才现状 | 第四季调研报告
全面认识Docker才是正经事
2016-03-11  来源:techtarget

整个虚拟化领域正在热议Docker,尤其是Docker实例—这一无处不在的开源软件容器平台。那么究竟什么是Docker,它适合你吗?

Docker是虚拟化革命的最新进展。大多数IT人熟悉虚拟机。在典型的虚拟化设置中,所有虚拟机都有其独立的内存空间、磁盘以及操作系统,当你拥有数百台虚拟机时,预留给每个操作系统的内存容量可能相当大。

Docker的优势不仅仅是效率。典型的应用设计在本质上是铁板一块,尤其是一切都被封装在同一台虚拟机中。管理并构建应用意味着一个单点故障或者错误构建就可能会搞坏整个虚拟机,故障诊断可能很困难。再次配置虚拟机要浪费很多时间。Docker引入了虚拟化服务而非虚拟化应用这一概念。它遵循UNIX口头禅“做一件事并把它做好”。Docker是如何让这一切变成现实的呢?

正在被使用的一个Docker示例是在线视频流服务比如Netflix。整个产品可以被拆分为一系列离散的服务,共同支撑整个应用。在宏观层面,有一系列的服务提供所有必需的组件,比如账号服务、网络流服务以及视频解码服务。

以服务为中心的方式有很多优势,包括部分应用能够被修改并进行部署而不必重新构建整个应用。这还减少了质量保证需求,因为只有被修改的部分以及与其交互的部分需要进行审查,这等同于直接节省了时间与财务支出。

Docker另一个明显的优势是在典型的场景中部署几台虚拟机需要花几分钟,而部署Docker镜像只需要几秒钟。

Docker创建了一个软件容器,容器在本质上是运行在受控实例中的一个文件系统。每一个文件系统实例——Docker容器都运行在经过修改的linux操作系统之上。

结果就是你可以在单台物理主机上运行多个Docker实例。不需要复制多个操作系统,因为Docker实例共享一个通用的操作系统层。

Docker使得开发人员检出最新可用的版本变得很容易,多亏有了容器特性,开发人员不再受制于配置的细微差异。

Docker的不足

Docker并非适合所有应用场景,Docker只能虚拟基于linux的服务。Windows Azure 服务能够运行Docker实例,但到目前为止Windows服务还不能被虚拟化。

可能最大的障碍在于管理实例之间的交互。由于所有应用组件被拆分到不同的容器中,所有的服务器需要以一致的方式彼此通信。这意味着任何人如果选择复杂的基础设施,那么必须掌握应用编程接口管理以及集群工具,比如Swarm、Mesos或者Kubernets以确保机器按照预期运转并支持故障切换。

Docker在本质上是一个附加系统。使用文件系统的不同层构建一个应用是有可能的。每个组件被添加到之前已经创建的组件之上,可以比作为一个文件系统三明治。分层架构带来另一方面的效率提升,当你重建存在变化的Docker镜像时,不需要重建整个Docker镜像,只需要重建变化的部分。

可能更为重要的是,Docker旨在用于弹性计算。每个Docker实例的运营生命周期有限,实例数量根据需求增减。在一个管理适度的系统中,这些实例生而平等,不再需要时便各自消亡了。

针对Docker环境存在的不足,意味着在开始部署Docker前需要考虑如下几个问题。首先,Docker实例是无状态的。这意味着它们不应该承载任何交易数据,所有数据应该保存在数据库服务器中。

其次,开发Docker实例并不像创建一台虚拟机、添加应用然后克隆那样简单。为成功创建并使用Docker基础设施,管理员需要对系统管理的各个方面有一个全面的理解,包括linux管理、编排及配置工具比如Puppet、Chef以及Salt。这些工具生来就基于命令行以及脚本。

图A.运行Docker whalesay镜像

正如刚刚提到的那样,Docker被设计用于大规模Web部署。其他必需的组件包括版本控制以及自动化编排工具。

可以在大多数笔记本电脑或桌面上试用Docker—第一个很有趣的尝试是whalesay—但全面掌握Docker可能需要一些时间。如果你正在寻求构建弹性应用,那么将Docker作为第一选择恰恰是为你自己考虑。