首页 安全动态 正文
  • 本文约1963字,阅读需10分钟
  • 326
  • 0

Docker容器十年:技术演进与未来展望

摘要

原文来源: Communications of the ACM, March 2026 作者: Anil Madhavapeddy, David J. Scott, Justin Cormack 核心要点 正如航运集装箱标准化了货物运输方式,Docker将应用程序及其运行所需的一切(代码、数据、配置)打包成可在任何地方运行的便携式容器 Linux命名空间使D...

**原文来源:** Communications of the ACM, March 2026  
**作者:** Anil Madhavapeddy, David J. Scott, Justin Cormack

---

## 核心要点

- 正如航运集装箱标准化了货物运输方式,Docker将应用程序及其运行所需的一切(代码、数据、配置)打包成可在任何地方运行的便携式"容器"
- Linux命名空间使Docker能够在不需要重量级虚拟机的情况下隔离应用程序,通过在内核级别重新映射资源访问(文件系统、网络、进程)来为每个容器提供自己的系统资源视图,同时保持原生性能
- Docker通过在桌面应用程序中嵌入Linux来支持macOS和Windows,而不是在主机操作系统中运行
- Docker重新利用了SLIRP(一个1990年代为Palm Pilots设计的拨号工具),通过将容器网络流量通过主机系统调用进行转换而不是网络桥接,来避免触发企业防火墙限制

---

## 技术起源

在2000年代初期,手动安装Linux发行版并处理无数依赖项,然后手工编译和配置一批软件以在新机器上运行是常见的做法。到2010年,随着云计算的兴起,这个过程变得更加复杂,应用程序被期望在跨多个主机的多个虚拟机上运行,且具有不同的资源需求。

Docker通过使开发人员能够将他们的应用程序及其所有依赖项打包成一系列文件系统镜像或"容器"来简化这个过程,这些容器可以在任何安装了Docker的机器上运行。与虚拟机体验(涉及安装整个操作系统)不同,它只需要几个命令即可启动和运行。

### Docker如何运行Linux容器

Docker是一个客户端-服务器应用程序,服务器守护进程(dockerd)在主机上运行,docker CLI客户端通过RESTful Docker API发送请求。守护进程创建和管理所有系统资源,如容器、镜像、网络和卷。

当开发人员调用docker CLI命令时,它通过众所周知的Unix域套接字发送API调用。虽然守护进程曾经是一个单体程序,但在2015年左右我们将其拆分为专门的组件:

- **buildkit**:组装文件系统镜像
- **containerd**:管理这些镜像实例化为运行中的容器,并关联网络和存储资源

### Linux命名空间的力量

Docker选择使用Linux的一项称为**命名空间**的功能。命名空间使每个进程能够更好地控制如何访问共享资源,如文件和目录。

例如,在包含 `/alice/etc/passwd` 和 `/bob/etc/passwd` 的根文件系统中,处于不同命名空间下的两个进程可以看到不同的 `/etc/passwd` 版本,分别解析到 `/alice` 或 `/bob` 下的版本。进程本身不知道其请求被重新映射到更广泛的根文件系统中,也永远无法"看到"其范围之外的文件。

命名空间仅在**打开**资源时应用,生成的文件描述符对后续操作(如读取或写入)作为正常内核资源运行,无需进一步开销。这允许Linux内核高效地管理共享资源,同时仍然提供应用程序与底层文件系统所需的隔离级别。

Linux多年来逐步添加了对**七种不同类型命名空间**的支持,当一起使用时,它们允许单个内核以最小开销为进程分配资源提供极大的灵活性。

---

## 超越Linux的演进

Docker在2013年做出的重大进步是使用命名空间在VM提供的重量级隔离与OS原语提供的易用性和与现有软件的兼容性之间找到务实的平衡。

### macOS和Windows支持

Docker通过在桌面应用程序中嵌入Linux来支持macOS和Windows,通过库虚拟机监视器而不是在主机操作系统中运行。这确保了无论开发人员使用什么操作系统,Docker体验都保持一致。

---

## 新兴开发者工作流

Docker的流行源于它解决了许多开发人员长期面临的问题:如何开发和部署越来越多地用不同语言编写的微服务。它已成为我们在Kubernetes等多租户平台上管理云原生应用程序的事实标准,并为可重复的科学研究设定了更高(但尚未完美)的标准。

### 未来展望

随着AI驱动的工作负载迅速演进,开发者工作流也在快速发展。Docker正在适应支持异构硬件,如GPGPU和FPGA,以满足现代AI和机器学习工作负载的需求。

---

## 结论

Docker Hub仅作为可以共享镜像的多个注册表之一,托管了超过**1400万个应用程序镜像**,每月交付超过**110亿次镜像拉取**。Docker的成功不仅在于其技术创新,更在于它为开发人员提供了一个无摩擦的开发体验,使应用程序的构建、分发和运行变得前所未有的简单。

---

**参考链接:** https://cacm.acm.org/research/a-decade-of-docker-containers/

评论
更换验证码
友情链接