Docker 是一个开源的容器化平台,用于构建、打包、分发和运行应用程序及其依赖项。它基于操作系统级虚拟化(即容器技术),利用 Linux 内核的命名空间(Namespaces)和控制组(cgroups)等特性,实现进程隔离、资源限制与环境一致性。Docker 容器引擎(Docker Engine)是 Docker 的核心组件,包含:
- Docker Daemon(dockerd):后台守护进程,负责管理镜像、容器、网络和存储卷等;
- Docker CLI(docker):命令行接口,用户通过它与 daemon 通信(如
docker run,docker build); - Containerd 和 runc:Docker Engine 底层依赖的标准化容器运行时(自 Docker 18.09 起默认集成 containerd 作为运行时管理器,runc 为 OCI 兼容的容器运行时)。
Docker 镜像(Image)是只读模板,包含运行应用所需的所有文件系统层;容器(Container)则是镜像的可运行实例,具有独立的文件系统、网络、进程空间,轻量、快速启动、跨环境一致。
# 示例:运行一个 Nginx 容器dockerrun-d-p8080:80--namemy-nginx nginx:alpineDocker 容器与虚拟机(VM)的核心区别在于虚拟化层级不同,导致在架构、启动速度、资源开销、隔离性与适用场景等方面存在显著差异:
| 维度 | Docker 容器 | 虚拟机(VM) |
|---|---|---|
| 虚拟化层级 | 操作系统级虚拟化(OS-level virtualization) | 硬件级虚拟化(Hypervisor 层,如 KVM、Hyper-V) |
| 内核共享 | 共享宿主机 Linux 内核(同一内核,多个用户空间) | 每个 VM 运行独立的客户操作系统 + 完整内核(含驱动) |
| 启动速度 | 毫秒级启动(仅需启动进程) | 秒级至分钟级(需加载 Guest OS 内核、服务等) |
| 资源开销 | 极低:无冗余 OS 开销,内存/CPU 占用小,密度高 | 较高:每个 VM 需分配独占内存、CPU、磁盘,有明显开销 |
| 镜像/模板 | 镜像分层存储(UnionFS),复用基础层,体积小(MB级) | 虚拟磁盘文件(如 .qcow2/.vmdk),通常 GB 级 |
| 隔离性 | 进程/文件系统/网络/IPC 隔离(通过 Namespaces + cgroups),轻量隔离;安全性依赖内核加固 | 强隔离:硬件级沙箱,Guest OS 与宿主完全解耦,更强安全边界 |
| 可移植性 | 依赖宿主机内核版本和兼容性(如 Linux 容器无法直接运行于 Windows 内核,除非通过 WSL2) | 跨平台性强(x86 VM 可在任意支持 Hypervisor 的硬件上运行) |
| 典型用途 | 微服务部署、CI/CD 构建环境、云原生应用快速扩缩容 | 运行异构操作系统(如 Windows Server on Linux host)、遗留系统迁移、强合规/多租户隔离场景 |
✅ 补充说明:
- Docker 容器不是进程,而是进程组+命名空间+cgroups 的组合体,本质是受控的 Linux 进程;
- VM 提供“操作系统虚拟化”,容器提供“进程虚拟化”;
- 安全敏感场景(如多租户 SaaS 平台)常采用“VM + 容器”嵌套方案(如 AWS Firecracker、Google gVisor 或 Kata Containers),兼顾性能与强隔离。