docker是基于什么的引擎
Docker 是基于 Linux 容器(LXC, Linux Containers) 技术发展而来的轻量级虚拟化引擎,其核心依赖以下关键技术:
1. Linux 内核特性
- Namespaces
实现进程隔离(PID、网络、文件系统、用户等),确保容器内进程无法感知或干扰其他容器或宿主机。
- 例如:
pid_namespace
让每个容器拥有独立的进程树。
- Control Groups (cgroups)
限制和分配资源(CPU、内存、磁盘I/O等),防止单个容器耗尽宿主机资源。
- Union File Systems (如 OverlayFS、AUFS)
通过分层存储实现镜像的轻量化和高效复用,容器共享基础镜像层,仅存储差异层。
- Seccomp & Capabilities
限制容器对宿主机内核的系统调用,提升安全性。
2. 容器运行时(Container Runtime)
- 早期:Docker 直接使用 LXC,后替换为自研的
libcontainer
(Go语言实现)。
- 现代:默认使用 containerd(符合 OCI 标准的高层运行时),底层通过 runc(OCI 参考实现)创建容器。
3. 标准化与开放生态
- OCI (Open Container Initiative)
Docker 推动的开放标准,定义容器镜像格式(OCI Image Spec)和运行时规范(OCI Runtime Spec),使 Docker 镜像兼容其他工具(如 Podman)。
- CRI (Container Runtime Interface)
允许 Docker 与 Kubernetes 等编排系统集成。
4. 与传统虚拟化的区别
特性 |
Docker (容器) |
传统虚拟机 (VM) |
隔离级别 |
进程级(共享宿主机内核) |
硬件级(独立虚拟化内核) |
启动速度 |
秒级(无需启动完整OS) |
分钟级(需启动Guest OS) |
性能损耗 |
低(直接调用宿主机内核) |
高(虚拟化层开销) |
镜像大小 |
MB 级(仅包含应用和依赖) |
GB 级(包含完整OS) |
5. 跨平台支持
- Linux:原生支持,直接调用内核特性。
- Windows/macOS:通过轻量级虚拟机(如 Hyper-V、QEMU)运行 Linux 内核,再启动容器(例如 Docker Desktop 的
LinuxKit
虚拟机)。
总结
Docker 本质是一个封装了 Linux 内核容器技术的工具链,通过标准化接口(OCI)和分层镜像设计,简化了容器的创建、分发和运行。其高效性源于直接利用宿主机的内核,而非模拟硬件。