
当我们谈论容器时,“Docker” 是一个绕不开的话题。但有趣的是,“Docker” 这个词其实有两种截然不同的含义,我们可能指的是 Docker 这家公司,也可能指 Docker 这项技术本身。
Docker 公司,全称 Docker, Inc.,是一家总部位于旧金山的科技公司。它的创始人是法裔美国开发者 Solomon Hykes。 这家公司的前身是一家名为 dotCloud 的平台即服务(PaaS)提供商。在 dotCloud 平台的背后,他们大量使用了 Linux 容器技术。 为了方便内部管理这些容器,他们开发了一个小工具,并给它起了个昵称——“Docker”。没想到,这个内部工具后来竟声名鹊起,成为了公司的核心产品。
“Docker”这个词源自英式英语,指的是码头工人。他们的工作是从货轮上装卸货物,这与 Docker 技术搬运和管理“软件集装箱”的理念不谋而合,非常形象。
2013年,公司果断地剥离了当时 struggling 的 PaaS 业务,将公司名改为 “Docker, Inc.”,从此专注于将 Docker 容器技术推广到全世界,并取得了巨大的成功。 在接下来的内容中,为了清晰起见,当我们提到 Docker, Inc. 时,我们指的是这家公司。而当我们只说 Docker 时,我们指的则是它背后的技术。
大多数人所说的 Docker,其实是指那套用于运行和管理容器的技术。要理解这项技术,我们可以从三个层面入手:运行时(Runtime)、守护进程(Daemon)和编排器(Orchestrator)。

运行时是 Docker 技术栈的最底层,它才是真正负责启动和停止容器的那个部分。你可以把它想象成汽车的发动机,是它提供了最核心的动力。Docker 的运行时采用分层架构,协同工作。
最底层的运行时叫做 runc。它是开放容器倡议(OCI)标准的一个参考实现,专门负责与操作系统内核打交道,创建和销毁容器所需的各种环境,比如命名空间和控制组。在你的系统上,每一个运行中的容器,背后都有一个 runc 实例在工作。
在 runc 之上,是更高一层的运行时,叫做 containerd。它的发音像 “container-dee”。containerd 负责管理整个容器的生命周期,包括从镜像仓库拉取镜像、管理存储,以及指挥 runc 去启动或停止容器。可以把 containerd 想象成一个工厂的车间主管,他负责接收订单、管理物料,并指挥工人(runc)去完成具体的工作。
守护进程,也就是 dockerd,位于 containerd 之上。它扮演着一个“大管家”的角色,执行更高级别的任务。我们平时使用 Docker 命令时,主要就是和这个守护进程在交互。
它的职责范围很广,比如提供我们熟悉的 Docker API、管理镜像、管理数据卷(Volumes)、管理网络等等。dockerd 的一个核心价值在于,它提供了一个简单易用的标准接口,将底层复杂的实现细节给隐藏了起来,让我们能用非常便捷的方式来操作容器。
当容器数量变得非常多,并且分布在多台机器上时,我们就需要一个工具来统一管理它们,这就是“编排器”的角色。Docker 自带了一个原生的容器编排工具,叫做 Docker Swarm。
一个 Swarm 集群由多个运行着 Docker 的节点组成,你可以把它想象成一支“集装箱船队”。Docker Swarm 负责调度和管理这支船队,确保所有的“集装箱”(容器)能够协同工作。相比于目前更主流的 Kubernetes,Docker Swarm 的优点是简单易用,部署和管理都非常方便,但功能和生态系统上则没有 Kubernetes 那么强大。
在前面我们提到了 OCI(Open Container Initiative)。这是一个非常重要的行业组织。
OCI 的主要职责是为容器技术的基础组件制定统一的标准,特别是镜像格式和容器运行时这两个核心部分。
要理解 OCI 的由来,我们得回顾一小段历史。当年 Docker 技术迅速崛起,几乎成了容器的代名词。但另一家名为 CoreOS 的公司(后来被 Red Hat 收购,而 Red Hat 又被 IBM 收购)对 Docker 的某些做法不太满意,于是他们自己创建了一套名为 appc 的开放标准,并推出了一个叫做 rkt(发音像 “rocket”)的容器引擎。
这一下,容器世界出现了两个互不兼容的标准,就像铁路有了两种不同宽度的铁轨,这会导致整个生态的分裂和混乱。为了避免这种情况,行业里的主要玩家们决定坐下来,共同成立了 OCI 这个组织,旨在为容器技术建立一个统一、开放的规范。
这个“铁轨”的比喻非常贴切。OCI 制定的标准就像是统一了铁轨的宽度和规格。这样一来,所有人都可以放心地去制造更好的火车、更好的车厢、更好的信号系统,因为他们知道这些东西都可以在标准化的轨道上运行。
如今,OCI 已经发布了几个重要的规范,包括镜像规范、运行时规范和分发规范。现代版本的 Docker 已经完全兼容这些 OCI 标准。
在这一部分里,我们厘清了 Docker 的双重含义。我们了解了 Docker, Inc. 这家公司是如何从一个内部工具起家,并最终引领了现代容器革命。
同时,我们深入探讨了 Docker 技术的内部结构,理解了运行时(containerd 和 runc)、守护进程(dockerd)以及编排器(Docker Swarm)各自的角色和关系。