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 容器 | 传统虚拟机 |
|:------|:-----------|:-----------|