Fix format issue

This commit is contained in:
Baohua Yang
2026-02-21 10:19:28 -08:00
parent 063c3f1381
commit 47cfc173a6
45 changed files with 596 additions and 604 deletions

View File

@@ -14,27 +14,32 @@ Docker 做的事情类似:无论你的应用是用 Python、Java、Node.js 还
笔者认为Docker 解决的是软件开发中最古老的问题之一**"在我机器上明明能跑啊!"**
```
开发环境 生产环境
┌─────────────────┐ ┌─────────────────┐
Python 3.14 │ ≠ │ Python 3.11 │
Ubuntu 24.04 │ │ Ubuntu 22.04
│ 特定版本的库 │ │ 不同版本的库 │
└─────────────────┘ └─────────────────┘
↓ ↓
运行正常 运行失败!
```mermaid
flowchart LR
subgraph Dev ["开发环境"]
direction TB
A["Python 3.14<br/>Ubuntu 24.04<br/>特定版本的库"] --> B["运行正常"]
end
subgraph Prod ["生产环境"]
direction TB
C["Python 3.11<br/>Ubuntu 22.04<br/>不同版本的库"] --> D["运行失败!"]
end
A -. "≠" .-> C
```
有了 Docker
```
开发环境 生产环境
┌─────────────────┐ ┌─────────────────┐
Docker 镜像 │ = │ 同一个镜像 │
│ (包含所有依赖) │ │ (完全一致) │
└─────────────────┘ └─────────────────┘
↓ ↓
运行正常 运行正常!
```mermaid
flowchart LR
subgraph Dev ["开发环境"]
direction TB
A["Docker 镜像<br/>(包含所有依赖)"] --> B["运行正常"]
end
subgraph Prod ["生产环境"]
direction TB
C["同一个镜像<br/>(完全一致)"] --> D["运行正常!"]
end
A === "=" === C
```
### Docker vs 虚拟机
@@ -79,13 +84,15 @@ Docker 使用 [Go 语言](https://golang.google.cn/) 开发,基于 Linux 内
Docker 的底层实现经历了多次演进
```
2013 2014 2015 现在
│ │ │
▼ ▼ ▼
LXC ──→ libcontainer ──→ runC ──→ containerd + runC
└── OCI 标准化
```mermaid
flowchart LR
subgraph Timeline
direction LR
LXC["LXC<br/>(2013)"] --> libcontainer["libcontainer<br/>(2014)"]
libcontainer --> runC["runC<br/>(2015)"]
runC --> containerd["containerd + runC<br/>(现在)"]
runC --> OCI["OCI<br/>标准化"]
end
```
- **LXC**2013Docker 最初基于 Linux Containers

View File

@@ -57,16 +57,17 @@ Docker 的出现为上述问题提供了完美的解决方案。它通过"一次
具体内容如下
```
开发环境 测试环境 生产环境
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Docker │ = │ Docker │ = │ Docker │
镜像 │ │ 镜像 │ │ 镜像 │
└─────────┘ └─────────┘ └─────────┘
↓ ↓ ↓
完全一致 完全一致 完全一致
```mermaid
flowchart TD
dev["开发环境"] --> img1["Docker 镜像"]
test["测试环境"] --> img2["Docker 镜像"]
prod["生产环境"] --> img3["Docker 镜像"]
img1 === img2 === img3
img1 --> res1["完全一致"]
img2 --> res2["完全一致"]
img3 --> res3["完全一致"]
```
### Docker 的核心优势
@@ -112,40 +113,42 @@ $ docker compose up
Docker 容器共享宿主机内核无需为每个应用运行完整的操作系统
```
传统虚拟机方案:
┌────────────────────────────────────────────────┐
│ 物理服务器 (64GB 内存) │
├──────────────┬───────────────┬─────────────────┤
│ VM1 │ VM2 │ VM3 │
8GB 内存 8GB 内存 │ 8GB 内存 │
(含 OS 2GB) (含 OS 2GB) │ (含 OS 2GB) │
应用 1 应用 2 │ 应用 3 │
└──────────────┴───────────────┴─────────────────┘
实际可用于应用3 × 6GB = 18GB ❌
```mermaid
flowchart TD
subgraph VM ["传统虚拟机方案 (实际可用于应用: 18GB) ❌"]
direction TB
Server1["物理服务器 (64GB 内存)"]
subgraph VMs [" "]
direction LR
VM1["VM1<br/>8GB 内存 (含 OS 2GB)<br/>应用 1"]
VM2["VM2<br/>8GB 内存 (含 OS 2GB)<br/>应用 2"]
VM3["VM3<br/>8GB 内存 (含 OS 2GB)<br/>应用 3"]
end
Server1 --- VMs
end
Docker 方案:
┌────────────────────────────────────────────────┐
│ 物理服务器 (64GB 内存) │
宿主机 OS + Docker (约 4GB) │
├──────────────┬───────────────┬─────────────────┤
容器 1 容器 2 │ 容器 3 │
应用 1 应用 2 │ 应用 3 │
(按需分配) (按需分配) (按需分配) │
└──────────────┴───────────────┴─────────────────┘
实际可用于应用:约 60GB ✅
subgraph Docker ["Docker 方案 (实际可用于应用: 约 60GB) ✅"]
direction TB
Server2["物理服务器 (64GB 内存)<br/>宿主机 OS + Docker (约 4GB)"]
subgraph Containers [" "]
direction LR
C1["容器 1<br/>应用 1<br/>(按需分配)"]
C2["容器 2<br/>应用 2<br/>(按需分配)"]
C3["容器 3<br/>应用 3<br/>(按需分配)"]
end
Server2 --- Containers
end
```
#### 4. 持续交付和部署
Docker 完美契合 DevOps 的工作流程
```
代码提交 ──→ 自动构建镜像 ──→ 自动测试 ──→ 自动部署
│ │ │ │
▼ ▼ ▼ ▼
Git docker 容器内 容器滚动
push build 运行测试 更新
```mermaid
flowchart LR
A["代码提交<br/>(Git push)"] --> B["自动构建镜像<br/>(docker build)"]
B --> C["自动测试<br/>(容器内运行测试)"]
C --> D["自动部署<br/>(容器滚动更新)"]
```
使用 [Dockerfile](../04_image/4.5_build.md) 定义镜像构建过程使得
@@ -172,17 +175,25 @@ Docker 可以在几乎任何平台上运行:
- **独立部署**更新一个服务不影响其他服务
- **技术多样**不同服务可以用不同语言和框架
```
┌───────────────────────────────────────────────────┐
微服务架构示例 │
├─────────────┬─────────────┬───────────────────────┤
前端容器 │ API 容器 │ Worker 容器 │
(Node.js) (Python) (Go) │
├─────────────┴─────────────┴───────────────────────┤
Redis 容器 │
├───────────────────────────────────────────────────┤
PostgreSQL 容器 │
└───────────────────────────────────────────────────┘
```mermaid
flowchart TD
subgraph Microservices ["微服务架构示例"]
direction TB
subgraph AppLayer ["应用层"]
direction LR
Frontend["前端容器<br/>(Node.js)"]
API["API 容器<br/>(Python)"]
Worker["Worker 容器<br/>(Go)"]
end
Redis["Redis 容器"]
DB["PostgreSQL 容器"]
Frontend --> API
API --> Redis
API --> DB
Worker --> Redis
Worker --> DB
end
```
### Docker 不适合的场景