简介
Docker 是一个开源的容器化平台,用于构建、部署和管理应用程序。它通过容器技术将应用程序及其依赖项打包成标准化单元,确保在不同环境中运行的一致性。
Docker 官网
Docker 中文社区
Docker Hub
Docker 汉化包
Windows Subsystem for Linux 文档
核心概念
从最基础的元素开始,理解 Docker 的构成单元:
-
Docker 镜像 (image)
轻量级、只读的软件包,包含运行应用所需的代码、运行时、库、环境变量和配置文件。镜像由多层文件系统组成,支持分层复用和增量更新。
-
Docker 容器 (container)
镜像的运行实例,拥有独立的进程空间、网络和文件系统。容器在镜像层之上添加一个可写层,生命周期独立,可随时启动、停止或删除。
-
Docker 数据卷 (volume)
一种专门用于持久化数据的 Docker 对象,独立于容器的生命周期。它提供:
- 数据持久化:容器删除后数据依然保留
- 数据共享:多个容器可挂载同一数据卷,实现数据交换
- 与宿主机解耦:数据由 Docker 管理,便于备份和迁移
- Dockerfile
文本文件,通过一系列指令(如 FROM、RUN、COPY)定义如何构建镜像。
javascript
# 示例:基于 Nginx 镜像构建自定义镜像
FROM nginx:alpine
COPY ./html /usr/share/nginx/html
EXPOSE 80
-
Docker Hub
公共镜像仓库,用于共享和分发镜像。也可搭建私有 Registry(如 Docker Registry、Harbor)管理内部镜像。
-
Docker 引擎
C/S 架构中的服务端(守护进程),负责创建和管理容器、镜像、网络等。它是 Docker 的核心运行环境。
Docker 的优势
- 轻量高效:容器共享主机操作系统内核,资源占用远低于虚拟机
- 跨平台:支持 Linux、Windows 和 macOS,实现"一次构建,随处运行"
- 快速部署:秒级启动容器,提升开发和运维效率
- 隔离性:每个容器独立运行,通过 Namespace 和 Cgroup 实现进程、网络、文件系统的隔离,避免环境冲突
- 版本控制与分层存储:Dockerfile 和镜像可纳入 Git 管理,实现基础设施即代码;镜像分层复用公共层,节省磁盘和网络传输时间
- 生态丰富:与 CI/CD 工具(Jenkins、GitLab CI)、编排工具(Kubernetes、Docker Swarm)无缝集成
应用场景
- 微服务架构:将复杂应用拆分为多个独立服务,每个服务打包为容器,独立开发、部署和扩展(如订单、支付、用户服务
- 持续集成/交付 (CI/CD):在 Jenkins 或 GitLab CI 中通过 Docker 构建、测试和发布应用,保证开发、测试、生产环境一致性
- 开发环境标准化:团队共享同一 Docker 镜像,消除"在我机器上能运行"的问题,新人加入可秒级搭建开发环境
- 快速原型与测试:利用容器快速启动服务(如数据库、消息队列),方便功能验证和集成测试
- 混合云/多云部署:容器镜像不受底层基础设施限制,可在不同云平台或本地数据中心间灵活迁移
核心架构
Docker 采用 客户端-服务器(C/S)架构:
-
Docker 客户端
通过 docker 命令行工具或直接调用 REST API 与 Docker 守护进程通信。
-
Docker 守护进程(dockerd)
核心后台进程,负责管理镜像、容器、网络、数据卷等;
接收客户端请求,并通过 containerd 管理容器生命周期;
与镜像仓库交互,拉取或推送镜像。
-
containerd
工业级容器运行时管理器,负责镜像传输、存储和容器执行控制;
它通过 containerd-shim 为每个容器创建一个垫片进程,保持容器独立运行;
调用底层的 runc 真正创建和运行容器。
-
runc
轻量级命令行工具,根据 OCI(开放容器倡议)标准直接与 Linux 内核交互,创建容器的隔离环境。
-
镜像仓库
存储 Docker 镜像的远程服务,默认是 Docker Hub,也可搭建私有仓库;
守护进程和 containerd 均可从仓库拉取镜像到本地缓存。

常用工具与生态
- Docker Compose:通过 YAML 文件定义和运行多容器应用(如 Web 服务 + 数据库 + 缓存),适合本地开发和测试
javascript
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
- Docker Swarm:Docker 原生的容器编排工具,可将多个 Docker 主机组成集群,提供服务发现、负载均衡和伸缩能力
- Docker Registry:用于存储和分发私有镜像,可自建(如 registry:2 镜像)或使用云服务商提供的镜像仓库
- Kubernetes:业界主流的容器编排平台,Docker 可作为其容器运行时,与 Docker CLI 和镜像格式兼容
Docker 与虚拟机的区别
