mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 12:21:17 +00:00
Fix format issue
This commit is contained in:
@@ -8,25 +8,18 @@
|
||||
|
||||
> **核心思想**:将多个只读层叠加,最上层可写,形成完整的文件系统。
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 容器看到的文件系统 │
|
||||
│ /bin /etc /lib /usr /var /app /data │
|
||||
└────────────────────────┬────────────────────────────────┘
|
||||
│
|
||||
┌───────────────┴───────────────┐
|
||||
│ UnionFS 联合挂载 │
|
||||
└───────────────┬───────────────┘
|
||||
│
|
||||
┌────────────────────────┴────────────────────────────────┐
|
||||
│ 容器层 (读写) │ /app/data/log.txt (新写入) │
|
||||
├────────────────────┼────────────────────────────────────│
|
||||
│ 镜像层3 (只读) │ /app/app.py │
|
||||
├────────────────────┼────────────────────────────────────│
|
||||
│ 镜像层2 (只读) │ /usr/local/bin/python │
|
||||
├────────────────────┼────────────────────────────────────│
|
||||
│ 镜像层1 (只读) │ /bin /etc /lib (基础系统) │
|
||||
└────────────────────┴────────────────────────────────────┘
|
||||
```mermaid
|
||||
flowchart TD
|
||||
ContainerFS["容器看到的文件系统<br/>/bin /etc /lib /usr /var /app /data"]
|
||||
UnionFS["UnionFS 联合挂载"]
|
||||
|
||||
ContainerLayer["容器层 (读写) : /app/data/log.txt (新写入)"]
|
||||
ImageLayer3["镜像层3 (只读) : /app/app.py"]
|
||||
ImageLayer2["镜像层2 (只读) : /usr/local/bin/python"]
|
||||
ImageLayer1["镜像层1 (只读) : /bin /etc /lib (基础系统)"]
|
||||
|
||||
ContainerFS --> UnionFS
|
||||
UnionFS --> ContainerLayer --> ImageLayer3 --> ImageLayer2 --> ImageLayer1
|
||||
```
|
||||
|
||||
---
|
||||
@@ -37,13 +30,10 @@ Docker 选择联合文件系统作为其存储驱动,主要基于以下几个
|
||||
|
||||
#### 1. 镜像分层复用
|
||||
|
||||
```
|
||||
nginx:alpine myapp:latest
|
||||
│ │
|
||||
└────────┬────────────┘
|
||||
│
|
||||
▼
|
||||
alpine:3.19 (共享基础层)
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Nginx["nginx:alpine"] --> Alpine["alpine:3.19 (共享基础层)"]
|
||||
MyApp["myapp:latest"] --> Alpine
|
||||
```
|
||||
|
||||
多个镜像共享相同的底层,节省磁盘空间。
|
||||
@@ -73,15 +63,21 @@ COPY . . # 层4:应用代码
|
||||
|
||||
当容器修改只读层中的文件时:
|
||||
|
||||
```
|
||||
修改前: 修改后:
|
||||
┌─────────────────────┐ ┌─────────────────────┐
|
||||
│ 容器层 (空) │ │ 容器层 │
|
||||
├─────────────────────┤ │ /etc/nginx.conf ←──┼── 复制到容器层后修改
|
||||
│ 镜像层 │ ├─────────────────────┤
|
||||
│ /etc/nginx.conf │ │ 镜像层 │
|
||||
└─────────────────────┘ │ /etc/nginx.conf │ (原文件仍在,但被遮蔽)
|
||||
└─────────────────────┘
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph Before ["修改前"]
|
||||
direction TB
|
||||
B_C["容器层 (空)"]
|
||||
B_I["镜像层<br/>/etc/nginx.conf"]
|
||||
end
|
||||
|
||||
subgraph After ["修改后"]
|
||||
direction TB
|
||||
A_C["容器层<br/>/etc/nginx.conf ← 复制到容器层后修改"]
|
||||
A_I["镜像层<br/>/etc/nginx.conf (原文件仍在,但被遮蔽)"]
|
||||
end
|
||||
B_C --- B_I
|
||||
A_C --- A_I
|
||||
```
|
||||
|
||||
**流程**:
|
||||
@@ -130,23 +126,19 @@ Storage Driver: overlay2
|
||||
|
||||
overlay2 是目前最推荐的存储驱动:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ merged(合并视图) │
|
||||
│ 容器看到的完整文件系统 │
|
||||
└─────────────────────────┬───────────────────────────────────┘
|
||||
│
|
||||
┌───────────────┴───────────────┐
|
||||
│ OverlayFS │
|
||||
└───────────────┬───────────────┘
|
||||
│
|
||||
┌────────────────┼────────────────┐
|
||||
▼ ▼ ▼
|
||||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||||
│ upper │ │ lower2 │ │ lower1 │
|
||||
│ (容器层) │ │ (镜像层) │ │ (基础层) │
|
||||
│ 读写 │ │ 只读 │ │ 只读 │
|
||||
└─────────────┘ └─────────────┘ └─────────────┘
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Merged["merged (合并视图)<br/>容器看到的完整文件系统"]
|
||||
OverlayFS["OverlayFS"]
|
||||
|
||||
Upper["upper<br/>(容器层)<br/>读写"]
|
||||
Lower2["lower2<br/>(镜像层)<br/>只读"]
|
||||
Lower1["lower1<br/>(基础层)<br/>只读"]
|
||||
|
||||
Merged --> OverlayFS
|
||||
OverlayFS --> Upper
|
||||
OverlayFS --> Lower2
|
||||
OverlayFS --> Lower1
|
||||
```
|
||||
|
||||
- **lowerdir**:只读的镜像层(可以有多个)
|
||||
|
||||
Reference in New Issue
Block a user