1. Docker 基础入门:发展史、核心概念与对比

1.1 Docker 发展史:从容器技术到行业标准

Docker 并非凭空诞生,而是建立在 Linux 内核容器技术(LXC、cgroups、Namespaces)之上。2013 年,dotCloud 公司(后更名为 Docker Inc.)开源了 Docker 引擎,将复杂的底层容器操作封装为简洁的 CLI 和 API,迅速引爆了 DevOps 和微服务领域。

年份 里程碑事件 影响
2008 LXC(Linux Containers)发布 提供首个完整的容器管理用户空间工具集
2013 Docker 0.1 开源 将 LXC 封装为“构建-运输-运行”三阶段工作流
2014 Docker 1.0 正式版 + Docker Hub 上线 镜像仓库生态形成,社区爆发式增长
2015 OCI(Open Container Initiative)成立 标准化容器运行时(runc)与镜像规范
2017 Docker 拆分出 containerd + Moby 项目 核心运行时捐赠给 CNCF,成为 Kubernetes 默认 CRI
2020+ Docker Desktop / Docker Compose V2 普及 本地开发与 CI/CD 深度集成,DAG 任务调度首选容器化底座
关键认知:Docker 的成功不在于发明了容器,而在于定义了“镜像 + 分层文件系统 + 仓库”这一标准化交付模型,使得“一次构建,到处运行”从口号变为现实。

1.2 核心概念:镜像、容器、仓库

Docker 的三大核心概念构成了容器化工作流的闭环。理解它们之间的关系,是掌握 Docker 的基石。

  • 镜像(Image):一个只读的、分层结构的模板,包含运行应用所需的完整文件系统、依赖、配置和元数据。镜像由 Dockerfile 构建,不可变。
  • 容器(Container):镜像的运行实例。容器在镜像层之上添加一个可写层,拥有独立的进程、网络和文件系统隔离。容器可以被启动、停止、删除,状态默认不持久。
  • 仓库(Registry):集中存储和分发镜像的服务。Docker Hub 是官方公共仓库,企业可搭建私有仓库(如 Harbor、Nexus)。
Docker 三大核心概念关系图 镜像 (Image) 只读模板 + 分层文件系统 容器 (Container) 镜像运行实例 + 可写层 仓库 (Registry) 镜像存储与分发中心 docker run docker pull docker push 工作流闭环: 1. 开发者在本地编写 Dockerfile,构建镜像。 2. 将镜像推送(push)到仓库,实现版本管理与分发。 3. 在任意主机上拉取(pull)镜像,通过 docker run 启动容器。 4. 容器运行期间可写,但停止后数据默认不保留(需挂载卷)。

1.3 Docker 与虚拟机的核心区别

Docker 容器与虚拟机(VM)都提供资源隔离,但实现原理和性能特征截然不同。下表从多个维度进行对比:

对比维度 Docker 容器 虚拟机 (VM)
隔离级别 进程级隔离(Namespaces + cgroups) 硬件级虚拟化(Hypervisor + 独立内核)
内核 共享宿主机内核 每个 VM 包含完整 Guest OS 内核
启动时间 毫秒级(秒级启动) 分钟级(需引导操作系统)
镜像大小 MB ~ 数百 MB(分层复用) GB ~ 数十 GB(包含完整 OS)
性能开销 接近原生(仅进程调度损耗) 较高(Hypervisor 转换 + 内核冗余)
资源密度 一台宿主机可运行数百容器 一台宿主机通常运行数台 VM
可移植性 镜像跨平台运行(需内核兼容) VM 镜像跨 Hypervisor 需转换
典型场景 微服务、CI/CD、DAG 任务调度 传统应用、多租户强隔离、Windows 应用
性能调优视角:在 DAG 任务调度场景中,容器化带来的“秒级启动 + 高密度部署”优势极为关键。每个 DAG 节点(如 Spark 任务、Python 脚本)可以独立封装为容器镜像,调度器按需拉起,任务完成后自动销毁,资源利用率远高于 VM 模式。

1.4 架构对比示意图:容器 vs 虚拟机

下图直观展示了两者在系统堆栈上的本质差异:

Docker 容器 vs 虚拟机 架构对比 Docker 容器架构 App A / App B / App C Docker Engine (containerd + runc) 宿主机操作系统内核 (Linux) 硬件 (CPU / 内存 / 磁盘 / 网卡) 虚拟机架构 App A App B Guest OS A Guest OS B Hypervisor (VMware / KVM / Hyper-V) 硬件 (CPU / 内存 / 磁盘 / 网卡) 共享内核,进程级隔离,轻量级 独立内核,硬件级隔离,重量级
避坑提示:虽然容器共享宿主机内核,但这并不意味着“不安全”。在 DAG 任务调度场景中,如果任务需要运行不同内核版本或加载内核模块(如某些性能监控工具),容器化将受限。此时应评估是否使用 VM 或采用“Docker in Docker”等特殊方案。

1.5 小结:Docker 在 DAG 任务调度中的定位

Docker 容器化技术为 DAG 任务调度提供了三大核心价值:

  1. 环境一致性:镜像封装了任务的所有依赖,消除“在我机器上能跑”的尴尬。
  2. 快速弹性:秒级启动和销毁,适合 DAG 中大量短生命周期任务节点。
  3. 资源隔离:cgroups 限制 CPU/内存,防止单个任务耗尽集群资源。