梳理脉络:究竟什么是容器云
容器云顾名思义,容器 + 云。将每个词语单独抽出来,我们或多或少都知道一些浅显的概念,并且都可以找到许多现成的资料,然而理解容器云的关键点并不是理解什么是容器,什么是云,而是为什么云需要容器?
所以本节不会详细的解释各个细致的概念,更多的是引导同学们的思路,告诉大家容器云的发展脉络。
基础概念
云
云本身是一个庞大的知识体系,对云的细致分析超出了本专栏的覆盖范围,且限于篇幅这里无法展开。云的基础知识网上都有现成的资料,理解起来并不会特别困难,同学们可以参考 wikipedia 的介绍即可,见 Cloud computing。这里我将摘出一些关键的定义并加以简要解释。
Cloud computing is the on-demand availability of computer system resources, especially data storage (cloud storage) and computing power, without direct active management by the user.
注:云计算为用户提供计算资源(如计算能力、存储、网络等),实现了基础设施的托管、按需分配与共享。
Service models
"Infrastructure as a service" (IaaS) refers to online services that provide high-level APIs used to abstract various low-level details of underlying network infrastructure like physical computing resources, location, data partitioning, scaling, security, backup, etc.
Platform as a service (PaaS) The capability provided to the consumer is to deploy onto the cloud infrastructure consumer-created or acquired applications created using programming languages, libraries, services, and tools supported by the provider.
Software as a service (SaaS) The capability provided to the consumer is to use the provider's applications running on a cloud infrastructure.
注:云计算的服务模式分为三类:IaaS, PaaS, SaaS。其中 IaaS 指基础设施即服务,PaaS 指平台即服务,SaaS 指软件即服务。他们的差别可总结为下图:

- IaaS: 云计算厂商提供基础设施:存储、网络、虚拟机等等。用户可以自行搭建环境、运行服务
- PaaS: 云计算厂商不仅提供基础设施,还负责提供库、服务以及开发工具,用户只要专注于自身的业务逻辑与数据
- SaaS: 云计算厂商直接提供应用程序,用户通过 API 访问、使用服务即可
Deployment models
Private cloud: Private cloud is cloud infrastructure operated solely for a single organization, whether managed internally or by a third party, and hosted either internally or externally.
Public cloud: Cloud services are considered "public" when they are delivered over the public Internet, and they may be offered as a paid subscription, or free of charge.
Hybrid cloud: Hybrid cloud is a composition of a public cloud and a private environment, such as a private cloud or on-premises resources, that remain distinct entities but are bound together, offering the benefits of multiple deployment models.
注:云有三种常见的部署模式:私有云、共有云、混合云。这个非常好理解,故不额外解释了。wiki 里还提到了许多其他的部署方式,如多云、高性能计算云等等……作为初学者我们可以先略过这些部署场景。
容器
为了更好的理解容器,我们先忘掉 Docker、虚拟化等名词,先从字面意思理解“容器”。
在码头装货、卸货时,我们会用到集装箱,集装箱里装了形状、大小各异的货物。由于集装箱的规则、尺寸是标准化的,不管货物有多千奇百怪,通过集装箱的封装,运输时货轮就不用管货物了,只要可以适配集装箱,就可以送货。
让我们把自己想象成古代的运输公司的老板。有天我们要送几头大象,于是我们命令工匠打造了一些笼子,用来关大象。这时候可能我现有的小破船放不下这个笼子,于是我们命令工匠打造了一艘大船,专门用来放装大象的笼子。这单生意结束之后,我们接了另一单生意,要求我们送几箱珍珠。我们发现以前的小破船就够用了,于是就用小船装着珍珠出发了。随着时间的迁移,我们可能有了越来越多的船,这些船每艘都为了特定的货物而打造,出海时我们的船队带着大大小小的船出发了。再之后我们开始思考:能不能造一艘大船,把所有的笼子标准化,让船的空间可以兼容所有的笼子呢?这样我们只要一种船,就可以运输所有的货物了。
上面的小例子我们会认为理所当然,在虚拟化的世界里也一样。最早的时候大家基于硬件抽象层创建了虚拟机,可以虚拟化出不同的操作系统,上面运行不同的应用。然而久而久之大家发现虚拟机实在是太笨重了(等于我们每次造了一艘船),每个虚拟机都包含完整的操作系统、运行时、应用。用户除了自己的应用之外,需要管理大量更底层的内容。所以我们看到传统的 IT 公司里,通常会有纯运维岗,负责基础设施的管理,从而让开发更专注于自己的业务。
后来人们发现,虽然虚拟机可以模拟各种各样的操作系统,但大多数时候我们的后端业务都是基于 Linux 系统的,即:我们只用 Linux 一艘船,和标准尺寸的集装箱,就可以覆盖大量的后端应用的部署场景了。那我们是否可以共享操作系统内核,与各种运行库呢?Linux Container 就是这样一种轻量级的虚拟化技术,鼎鼎有名的 Docker 就是基于容器技术的产品。下图即是虚拟机与容器的比较。
| 容器 | 虚拟机 |
|---|---|
![]() | ![]() |
在后面的内容中,我将提到大量的术语和缩写,这里简单的罗列一些常见的术语,并加以解释,方便同学们更好的理解:
- LXC: Linux Container 的缩写,一种轻量级虚拟化技术
- CGroup: linux 内核的一种技术,被容器技术所使用,可限制进程的资源使用
- Linux Namespace: linux 内核的一种技术,被容器技术所使用,可实现进程的资源隔离
- Docker: 基于容器技术的产品,已成为容器技术的标配
- 容器:容器技术的进程实例,其创建的轻量级的子系统中,可以部署、运行用户的应用
- 镜像:一种特殊的文件系统,提供容器运行的时候所需要的环境与配置
- 容器编排:自动化容器的部署、管理、扩展和联网
- Kubernetes: 一种容器编排工具,已成为容器编排的事实标准
容器云的梳理
什么是容器云
首先,我们可以给出容器云的大致定义:以容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员提供用于构建,发布和运行分布式应用的平台。其最显著的特征是云上构建容器服务。
容器云最核心的技术是容器技术,而基于容器技术的容器编排能力赋予了容器平台 PaaS 能力。为了理解这些概念,我们不妨从 Docker 开始说起。
Docker 为云带来了什么
云的终极目标是成为互联网的基础设施,而基础设施是为了业务服务的。在云计算服务模式的演进中,不管是 IaaS 还是 PaaS,都可以认为是 Everything as a Service 的一种变形。这一点在 2014 的文章 What Is Going on with PaaS? 中可以看出。
The role of the platform is clear, compelling, and powerful. It should be the fundamental piece, far more important and interesting than a bunch of cheap virtual machines running on commodity hardware.
如何使用户更高效的在云上落地业务始终是云的核心目标之一。
那曾经 PaaS 有什么问题呢?PaaS 的定位是云提供商提供基础设施与运行时,使用户可以专注于业务。然而当时的 PaaS 一个很严重的问题是应用打包。在 Docker 问世之前,云计算始终没有很好的解决应用的打包、部署问题。应用无法很好的在不同平台(或云提供商)迁移,意味着平台始终只是镜花水月罢了,用户依然只能在 IaaS 之上自己捣腾环境。
Docker 的镜像功能解决了应用打包问题。镜像实现了跨环境下的环境的一致性问题,只要两个环境都安装了 Docker,且内核版本一致,镜像就可以保证环境的一致性;同时通过 Dockerfile,Docker 解决了环境的标准化问题,应用的运行环境通过代码化的方式变得便于追溯、配置。
如果说,以前大家使用云计算时,除了机器在云上之外,日常的开发、运维、测试等行为与从前并无二致;那么收益于 Docker:
- DevOps 真正得到了良好的支持。从开发、测试到部署,镜像实现了环境的标准化与一致。
- PaaS 得到了促进与发展。用户不再需要从 IaaS 开始构建各种环境,相关的工具链完全可以由平台或第三方提供,从而用户可以真正专注于业务,将云作为平台使用。
从容器到容器云
首先我们抛出一个问题:仅仅只有容器,就足够驱动 PaaS 的飞跃了吗?
答案是否定的。我们再次明确,PaaS 一定是为了业务而服务的。而单个容器,仅仅是应用实例,无法覆盖业务的全部特性,例如:服务注册、服务发现、负载均衡、弹性扩缩容等等……
在容器技术日益成熟之后,业界的目光自然而然的放到了容器编排。容器编排指自动化容器的部署、管理、扩展和联网,容器编排工具将生命周期管理能力从单个容器,扩展到部署在大量机器集群上部署的复杂的、多容器工作负载。
注:需要说明的是,从容器到容器编排,经历了容器运行时的激烈竞争与角力,最终以 Docker 的落败告终,从此各厂商制定了容器运行时的标准,Docker 产品中的运行时 runc 成为容器运行时的可选项之一。这一段历史我们将在后面介绍 Kubernetes 时再展开。
在 Kubernetes 成为容器编排的事实标准的今天,我们谈起 PaaS 时,首先想到的不是容器,而是容器云,或者具体的说,是 Kubernetes 及其上下游生态。
那么容器云是 PaaS 吗?
也未必。容器云介于 IaaS 与 PaaS 之间。Kubernetes 基座提供了容器服务,而如果我们将容器类比为“轻量级虚拟机”,显然它更像传统的 IaaS;而当容器编排用于应用构建与发布时,它又展示了 PaaS 层的能力。
实际上现在各种 as s Service 的概念很多,比如 Database as a Service, Container as a Service, Kubernetes as a Service……我们大可不必纠结于此。
容器云的未来
云原生,云原生,云原生。重要的事情说三遍。在这里,我们先不谈及云原生。首先,云原生的定义尚未盖棺定论,相关社区仍在不断探索发展;其次,在初学阶段,越过 Kubernetes 高谈阔论云原生实在是会让人云里雾里,只有切实实践了 Kubernetes,了解了其理念、优势、缺陷,我们才能更好地理解云原生。
总结
本篇中,我们简单的介绍了云计算与容器技术,并简单的梳理了容器云,着重解释了 Docker 对于云的发展起到的促进作用。
下篇中,我们将讨论 DevOps、运维,打破大家对于运维的些许偏见,带大家切实感受容器云相关岗位的工作职责与工作内容。


查看3道真题和解析