Docker 改变了什么:从一个集装箱化工具说起

这是「朴素科技」的第一篇文章。我想用最朴素的方式,讲一个改变了整个软件行业的小工具——Docker,以及它背后的那家公司。

一、先聊一个老问题:「在我电脑上明明是好的」

如果你和工程师打过交道,几乎一定听过这句话:

“这个 bug 我复现不出来啊……在我电脑上明明是好的。”

这句话看起来好笑,背后却是一个真实而顽固的工程难题:软件运行的环境是不可复制的

同一个程序,在开发者的 MacBook 上能跑,在测试同事的 Windows 上崩了; 在线上正式服务器上又正常,但部署到客户的私有环境里又出错。 差异来自操作系统版本、系统库版本、运行时依赖、网络配置、文件系统权限…… 无数微小的环境差异,最终让「代码本身没问题」变成了工程上最难排查的问题之一。

在 Docker 出现之前,行业里已经有不少解法:

  • 虚拟机(VM):用 VMware、VirtualBox 模拟一台完整的电脑,隔离性极强,但启动慢、体积大(一台镜像常常十几 GB)。
  • 配置管理工具(Puppet、Chef、Ansible):用脚本把环境「刻」成一样的,但依然要在同一台操作系统里运行。
  • PaaS 平台(Heroku、Cloud Foundry):把环境托管给平台,开发者只管代码,但灵活度和控制力都让给了平台。

这些方案各自解决了部分问题,但都谈不上简单。 直到 2013 年,一个叫 Solomon Hykes 的年轻人在旧金山的一次会议上做了 2 分多钟的演讲,向世界介绍了 Docker

二、Docker 到底是什么

简单说:Docker 把应用程序和它运行所需的一切,打包进一个轻量、可移植、自包含的「容器」里。

听起来很抽象,可以用一个比喻来理解:

如果把软件比作「货物」,把运行环境比作「道路」, 那么过去的「虚拟机」相当于给每件货物都修一条铁路,而 Docker 做的事情,是发明了一种全世界通用的「集装箱」。

不管你用的是 Mac、Windows、Linux,也不管你在自己的笔记本、公司的机房、AWS 的东京节点、阿里云的深圳机房—— 只要能「吊起这个集装箱」,里面的货物就能一模一样地运行。

技术层面,Docker 并不是从零发明的。它的核心能力建立在 Linux 早已存在的两项能力之上:

  • cgroups:限制一个进程能使用多少 CPU、内存、磁盘 IO。
  • namespaces:让一个进程只能看到「属于自己的那部分世界」——独立的进程号、独立的网络接口、独立的文件系统视图。

Docker 的天才之处,是把这些原本只为内核开发者准备的能力,用一套极其简单的命令行工具开放给了所有人。

# 一个最经典的 Docker 例子
docker run -d -p 80:80 nginx

# 一行命令,就启动了一个完整的 Web 服务器
# 不管你装的是哪个发行版的 Linux,甚至装的是 macOS 或 Windows

在 Docker 之前,要让一个新人跑通一个项目,往往要花半天到一天装各种依赖; 有了 Docker 之后,把项目跑起来只需要一条命令

这个改变,看起来很小,但它的影响是结构性的。

三、Docker 这家公司

技术重要,但故事也重要。理解一家公司的演化,有助于理解一项技术为何走向今天的样子。

1. 诞生:从 dotCloud 到 Docker Inc.

2010 年前后,Solomon Hykes 在巴黎创办了一家叫 dotCloud 的公司,做的事情是 PaaS—— 帮开发者托管应用,开发者只需要把代码上传,平台负责部署、扩容、运维。

在做 PaaS 的过程中,dotCloud 的工程师们积累了一套内部使用的容器化工具,用来更高效地打包和运行客户的代码。 他们发现,这套工具本身的价值,可能比 dotCloud 这个业务还要大。

2013 年 3 月,dotCloud 把这套工具开源,命名为 Docker。 名字很短、好记、有画面感——容器、码头工人、跨越大洋的标准化——非常贴合它的精神。

同年 3 月 15 日,PyCon 上 Solomon Hykes 那场著名的闪电演讲,成为了开源历史上传播最广的 2 分钟之一:

“Build, ship, run. Any app, anywhere.”

2. 狂奔:开源、融资、生态

Docker 开源后的发展速度惊人:

  • 2013 年底,Docker 1.0 发布,宣布商业化公司 Docker Inc.。
  • 2014-2015 年,连续完成多轮数亿美元的融资,红杉资本、 Benchmark 等一线机构入局。
  • 围绕 Docker 迅速形成了一个庞大的工具生态:Kubernetes(容器编排)、Compose(多容器协同)、Machine、Swarm、Registry……
  • “容器化”从极客玩具,变成了云时代的基础设施。

3. 转折:Kubernetes 的崛起与商业化困境

容器只是「装货」的问题,真正困难的是「在大规模场景下调度几万个容器」—— 这件事最初 Docker 公司自己推 Swarm,但 Google 开源的 Kubernetes 在竞争中胜出。

Kubernetes 之父 Joe Beda 后来回忆说,Kubernetes 在设计之初就吸收了 Google 内部 Borg 系统十多年的经验, 并且走了一个非常聪明的路线:它没有自己造一套容器运行时,而是把 Docker 作为底层依赖之一, 通过标准化的容器接口(后来的 OCI 标准)把生态做成了开放联盟。

这让 Docker 的处境变得微妙:

  • 技术上,它是容器时代的开创者;
  • 商业上,Kubernetes 把“编排”这件事的标准拿走了,而 Docker Inc. 想做的“统一云平台”商业化并不顺利。

2018 年,Solomon Hykes 宣布卸任 CEO,把精力放到了新的项目上。 之后几年,Docker 经历了多次裁员、产品线调整、最终把企业业务卖给了 Mirantis,自己聚焦于开发者和中小企业市场。

4. 今天的 Docker

今天的 Docker 活得并不像 2015 年那样“性感”,但依然重要:

  • Docker Desktop:Mac 和 Windows 上最流行的容器开发环境。
  • Docker Hub:全球最大的公共容器镜像仓库之一,托管着数百万个镜像。
  • Docker Compose:单机多容器编排的事实标准,简单、清晰、好用。
  • Docker Scout、Docker Build Cloud 等新产品继续迭代。

它不再统治整个容器生态,但它依然是绝大多数开发者学习容器化的第一站。 这一点,无论从个人成长还是从历史意义上来说,都不应该被低估。

四、Docker 真正改变了什么

如果你只是把 Docker 当成一个“打包工具”,那还远远低估了它。

1. 对开发者:把“环境”变成了代码

以前,环境配置是一份写满命令的 Word 文档,是团队 wiki 里早已过时的截图,是同事口口相传的“你先这样这样那样那样”。 现在,环境配置变成了一份 Dockerfile 和一个 docker-compose.yml,和源代码一起提交到 Git。

环境从此是可版本化的、可审查的、可复现的。

2. 对公司:让小团队也能像大厂一样部署

在 Docker 之前,“我们的应用在生产环境跑得好好的”这件事,需要一个不小的运维团队来保障。 在 Docker 之后,一个 3 人的初创团队,也能用 GitHub Actions + Docker Hub + 一台云服务器,把上线流程做得和 FAANG 一样可靠。

这不是夸张——这是过去十年无数个创业公司真实发生的故事。

3. 对普通人:看不见的改变

也许你从来没有运行过一行 Docker 命令,但 Docker 已经在悄悄影响你的生活:

  • 你刷的短视频后端,是用容器化微服务部署的;
  • 你手机里的银行 App,背后可能跑着几十个用 Docker 打包的服务;
  • 你周末点的外卖、订的机票、查的天气,背后的系统在弹性扩容时,用的也是容器技术。

Docker 的伟大之处,恰恰在于它的伟大很难被直接看见。 它不是面向消费者的产品,而是面向工程师的工具;它不制造屏幕上炫目的 UI,而是让 UI 背后的服务更可靠、更便宜、更快。

五、一点朴素的感想

第一次接触 Docker 时,我还是个学生。当时觉得它“又是一个配置工具吧”, 但当我在香橙派 3LTS 上用 docker run 跑起 qBittorrent,用来下载动画时, 那种“原来事情可以这么简单”的感受,至今难忘。

朴素的科技,正是如此。 它不像某些产品那样尖叫着宣布自己的存在; 它只是让一件原本麻烦的事,变得不那么麻烦; 让一个原本需要一整个团队的事,缩减到一个下午; 让一个原本只属于大公司的事,第一次对小公司也敞开大门。

Docker 之后,Kubernetes、Serverless、边缘计算、WebAssembly ……一波又一波的技术接踵而至。 但 Docker 是一个很好的起点——它让我们看到:

真正改变生活的科技,往往朴素、扎实、不张扬。

这是「朴素科技」的第一篇文章。我计划每周更新一篇,写下我对科技、互联网、AI 与技术的小观察。 如果这些文字里有一两句让你停下来想了想,那就值得了。


参考资料

— RCLiLong,写于 2026 年夏