Docker - 架构
Docker - 架构
Section titled “Docker - 架构”理解 Docker 的架构(architecture)有助于阐明它是如何实现容器化(containerization)以及它与传统虚拟化(traditional virtualization)的区别。
传统虚拟化架构
Section titled “传统虚拟化架构”在传统虚拟化中,架构通常包含以下层(layers):
- Infrastructure(基础设施): 物理硬件(硬件:CPU、RAM、磁盘、网络)。
- Host Operating System(宿主操作系统): 安装在硬件上的主要操作系统(例如,Windows Server、Linux)。
- Hypervisor(虚拟机监控程序): 创建和管理虚拟机(VMs)的软件(如 VMware ESXi、Microsoft Hyper-V、KVM)。它抽象化硬件。
- Guest Operating System(客户操作系统): 每个 VM 运行一个完整、独立的操作系统副本(例如,多个 Linux 或 Windows 实例)。每个 Guest OS 都有自己的内核(kernel)、库(libraries)和二进制文件(binaries)。
- Applications(应用程序): 应用程序运行在每个 VM 内各自的 Guest OS 之上。
这种方法提供了强大的隔离性(isolation),但由于运行多个完整的操作系统会产生开销(overhead)。
Docker 容器化架构
Section titled “Docker 容器化架构”Docker 利用操作系统级虚拟化(容器化)实现了不同的架构:
- Infrastructure(基础设施): 物理硬件(硬件:CPU、RAM、磁盘、网络)。
- Host Operating System(宿主操作系统): 安装在硬件上的主要操作系统(例如,Linux、Windows)。
- Docker Engine(Docker 引擎): 运行在宿主操作系统上的核心 Docker 软件。它包括 Docker 守护进程(daemon,服务器)和客户端接口(client interface)(CLI、API)。该守护进程管理容器、镜像、网络和卷。
- Containers(容器): Docker 不运行完整的 VMs,而是在容器中运行应用程序。关键在于,所有容器共享宿主操作系统的内核。每个容器只打包其应用程序代码、运行时环境(runtime)(例如,Node.js、Python、Java)、系统工具、库以及除基础内核之外所需的设置。它们作为隔离的进程运行在宿主操作系统的用户空间(userspace)中。
这种架构提供了显著的优势:
- 效率: 容器比 VMs 轻量(lightweight)得多,因为它们不需要独立的操作系统内核。它们消耗更少的资源(CPU、RAM、磁盘空间)。
- 速度: 容器启动几乎是即时的,因为它们只是宿主操作系统上的进程,而 VMs 需要启动一个完整的操作系统。
- 密度: 由于开销较低,您可以在相同的硬件上运行比 VMs 多得多的容器。
Docker 引擎组件
Section titled “Docker 引擎组件”Docker 引擎本身遵循客户端-服务器架构(client-server architecture):
- Docker Daemon (
dockerd)(Docker 守护进程): 一个常驻后台进程(persistent background process),监听 Docker API 请求并管理 Docker 对象(objects),如镜像、容器、网络和卷。 - REST API: 指定了程序可以用来与守护进程通信并指示其执行何种操作的接口(interfaces)。
- Docker CLI Client (
docker)(Docker CLI 客户端): 用户与 Docker 交互的主要方式。客户端通过 REST API 向dockerd守护进程发送命令(如docker run、docker build)。
客户端可以与同一系统上的守护进程通信,或连接到远程 Docker 守护进程。