diff --git a/01_introduction/1.3_why.md b/01_introduction/1.3_why.md index a0c9679d4..d62c2e384 100644 --- a/01_introduction/1.3_why.md +++ b/01_introduction/1.3_why.md @@ -63,16 +63,11 @@ Docker 的出现为上述问题提供了完美的解决方案。它通过 “一 具体内容如下: ```mermaid -flowchart TD - dev["开发环境"] --> img1["Docker 镜像"] - test["测试环境"] --> img2["Docker 镜像"] - prod["生产环境"] --> img3["Docker 镜像"] - - img1 === img2 === img3 - - img1 --> res1["完全一致"] - img2 --> res2["完全一致"] - img3 --> res3["完全一致"] +flowchart LR + dev["开发团队"] -->|创建| img["Docker 镜像"] + img -->|测试团队验证| test["测试团队"] + test -- "有问题
反馈修改和更新" --> dev + test -- "没问题
发布" --> prod["生产环境"] ``` ### 1.3.3 Docker 的核心优势 @@ -117,30 +112,32 @@ $ docker compose up #### 3. 资源效率 -Docker 容器共享宿主机内核,无需为每个应用运行完整的操作系统。 +Docker 容器共享宿主机内核,无需为每个应用运行完整的操作系统。以一台 64GB 内存的物理服务器为例: +- **传统虚拟机方案**:每个虚拟机都需要运行完整的操作系统(每个额外占用如 2GB 内存),产生大量资源开销,实际可用于应用的内存可能只有约 18GB。 +- **Docker 方案**:容器直接共享宿主机系统,只需付出很少的基础开销(OS及引擎约 4GB),即可将约 60GB 的内存全部用于实际应用。 ```mermaid flowchart TD - subgraph VM ["传统虚拟机方案 (实际可用于应用: 18GB) ❌"] + subgraph VM ["传统虚拟机方案 ❌"] direction TB Server1["物理服务器 (64GB 内存)"] - subgraph VMs [" "] + subgraph VMs ["可用应用内存: 约 18GB"] direction LR - VM1["VM1
8GB 内存 (含 OS 2GB)
应用 1"] - VM2["VM2
8GB 内存 (含 OS 2GB)
应用 2"] - VM3["VM3
8GB 内存 (含 OS 2GB)
应用 3"] + VM1["VM 1: 应用 1
(含 2GB OS)"] + VM2["VM 2: 应用 2
(含 2GB OS)"] + VM3["VM 3: 应用 3
(含 2GB OS)"] end Server1 --- VMs end - subgraph Docker ["Docker 方案 (实际可用于应用: 约 60GB) ✅"] + subgraph Docker ["Docker 方案 ✅"] direction TB - Server2["物理服务器 (64GB 内存)
宿主机 OS + Docker (约 4GB)"] - subgraph Containers [" "] + Server2["物理服务器 (64GB 内存)
含约 4GB OS及引擎配置"] + subgraph Containers ["可用应用内存: 约 60GB"] direction LR - C1["容器 1
应用 1
(按需分配)"] - C2["容器 2
应用 2
(按需分配)"] - C3["容器 3
应用 3
(按需分配)"] + C1["容器 1: 应用 1
(按需分配)"] + C2["容器 2: 应用 2
(按需分配)"] + C3["容器 3: 应用 3
(按需分配)"] end Server2 --- Containers end @@ -208,25 +205,14 @@ flowchart TD 笔者认为,技术选型要客观。Docker 并非银弹,以下场景可能不太适合: -#### 1. 需要完全隔离的场景 - -容器共享宿主机内核,隔离性不如虚拟机。如果你需要运行不受信任的代码,虚拟机可能更安全。 - -#### 2. 需要特殊内核的场景 - -容器使用宿主机内核。如果应用需要特定版本的内核或内核模块,可能需要虚拟机。 - -#### 3. Windows 原生应用 - -虽然 Docker 支持 Windows 容器,但生态不如 Linux 容器成熟。传统 Windows 应用的容器化仍有挑战。 - -#### 4. 桌面应用 - -Docker 主要面向服务端应用。桌面 GUI 应用的容器化虽然可行,但通常得不偿失。 +- **需要完全隔离的场景**:容器共享宿主机内核,隔离性不如虚拟机。如果需要运行不受信任的代码,虚拟机可能更安全。 +- **需要特殊内核的场景**:容器使用宿主机内核。如果应用需要特定版本的内核或内核模块,可能需要虚拟机。 +- **Windows 原生应用**:虽然 Docker 支持 Windows 容器,但生态不如 Linux 容器成熟。传统 Windows 应用的容器化仍有挑战。 +- **桌面应用**:Docker 主要面向服务端应用。桌面 GUI 应用的容器化虽然可行,但通常得不偿失。 ### 1.3.5 与传统虚拟机的对比总结 -相关信息如下表: +下表对比了容器技术与传统虚拟机的区别: | 特性 | Docker 容器 | 传统虚拟机 | |:------|:-----------|:-----------|