mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 04:14:38 +00:00
Continue to fix format issues
This commit is contained in:
@@ -4,14 +4,19 @@
|
||||
|
||||
Bind Mount(绑定挂载)将**宿主机的目录或文件**直接挂载到容器中。容器可以读写宿主机的文件系统。
|
||||
|
||||
```
|
||||
宿主机 容器
|
||||
┌─────────────────────┐ ┌─────────────────────┐
|
||||
│ /home/user/code/ │ │ │
|
||||
│ ├── index.html │◄───────►│ /usr/share/nginx/ │
|
||||
│ ├── style.css │ Bind │ html/ │
|
||||
│ └── app.js │ Mount │ (同一份文件) │
|
||||
└─────────────────────┘ └─────────────────────┘
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph Host ["宿主机"]
|
||||
direction TB
|
||||
Dir1["/home/user/code/<br/>├── index.html<br/>├── style.css<br/>└── app.js"]
|
||||
end
|
||||
|
||||
subgraph Container ["容器"]
|
||||
direction TB
|
||||
Dir2["/usr/share/nginx/html/<br/>(同一份文件)"]
|
||||
end
|
||||
|
||||
Dir1 <-->|Bind Mount| Dir2
|
||||
```
|
||||
|
||||
---
|
||||
@@ -29,16 +34,14 @@ Bind Mount(绑定挂载)将**宿主机的目录或文件**直接挂载到容
|
||||
|
||||
#### 选择建议
|
||||
|
||||
```
|
||||
需求 推荐方案
|
||||
─────────────────────────────────────────
|
||||
开发时同步代码 → Bind Mount
|
||||
持久化数据库数据 → Volume
|
||||
共享配置文件 → Bind Mount
|
||||
容器间共享数据 → Volume
|
||||
备份方便 → Bind Mount(直接访问)
|
||||
生产环境 → Volume
|
||||
```
|
||||
| 需求 | 推荐方案 |
|
||||
|------|----------|
|
||||
| 开发时同步代码 | Bind Mount |
|
||||
| 持久化数据库数据 | Volume |
|
||||
| 共享配置文件 | Bind Mount |
|
||||
| 容器间共享数据 | Volume |
|
||||
| 备份方便 | Bind Mount(直接访问) |
|
||||
| 生产环境 | Volume |
|
||||
|
||||
---
|
||||
|
||||
@@ -311,19 +314,3 @@ $ docker run -v /app/data:/data ...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 本章小结
|
||||
|
||||
| 要点 | 说明 |
|
||||
|------|------|
|
||||
| **作用** | 将宿主机目录挂载到容器 |
|
||||
| **语法** | `-v /宿主机:/容器` 或 `--mount type=bind,...` |
|
||||
| **只读** | 添加 `readonly` 或 `:ro` |
|
||||
| **适用场景** | 开发环境、配置文件、日志 |
|
||||
| **vs Volume** | Bind 更灵活,Volume 更适合生产 |
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [数据卷](volume.md):Docker 管理的持久化存储
|
||||
- [tmpfs 挂载](tmpfs.md):内存临时存储
|
||||
- [Compose 数据管理](../../10_compose/10.5_compose_file.md):Compose 中的挂载配置
|
||||
|
||||
30
08_data_network/data/summary.md
Normal file
30
08_data_network/data/summary.md
Normal file
@@ -0,0 +1,30 @@
|
||||
## 本章小结
|
||||
|
||||
| 要点 | 说明 |
|
||||
|------|------|
|
||||
| **作用** | 将宿主机目录挂载到容器 |
|
||||
| **语法** | `-v /宿主机:/容器` 或 `--mount type=bind,...` |
|
||||
| **只读** | 添加 `readonly` 或 `:ro` |
|
||||
| **适用场景** | 开发环境、配置文件、日志 |
|
||||
| **vs Volume** | Bind 更灵活,Volume 更适合生产 |
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [数据卷](volume.md):Docker 管理的持久化存储
|
||||
- [tmpfs 挂载](tmpfs.md):内存临时存储
|
||||
- [Compose 数据管理](../../10_compose/10.5_compose_file.md):Compose 中的挂载配置
|
||||
|
||||
| 操作 | 命令 |
|
||||
|------|------|
|
||||
| 创建数据卷 | `docker volume create name` |
|
||||
| 列出数据卷 | `docker volume ls` |
|
||||
| 查看详情 | `docker volume inspect name` |
|
||||
| 删除数据卷 | `docker volume rm name` |
|
||||
| 清理未用 | `docker volume prune` |
|
||||
| 挂载数据卷 | `-v name:/path` 或 `--mount source=name,target=/path` |
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [绑定挂载](bind-mounts.md):挂载宿主机目录
|
||||
- [tmpfs 挂载](tmpfs.md):内存中的临时存储
|
||||
- [存储驱动](../../14_implementation/14.4_ufs.md):Docker 存储的底层原理
|
||||
@@ -397,20 +397,3 @@ $ docker volume inspect my-vol
|
||||
3. 在目标机器恢复
|
||||
|
||||
---
|
||||
|
||||
### 本章小结
|
||||
|
||||
| 操作 | 命令 |
|
||||
|------|------|
|
||||
| 创建数据卷 | `docker volume create name` |
|
||||
| 列出数据卷 | `docker volume ls` |
|
||||
| 查看详情 | `docker volume inspect name` |
|
||||
| 删除数据卷 | `docker volume rm name` |
|
||||
| 清理未用 | `docker volume prune` |
|
||||
| 挂载数据卷 | `-v name:/path` 或 `--mount source=name,target=/path` |
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [绑定挂载](bind-mounts.md):挂载宿主机目录
|
||||
- [tmpfs 挂载](tmpfs.md):内存中的临时存储
|
||||
- [存储驱动](../../14_implementation/14.4_ufs.md):Docker 存储的底层原理
|
||||
|
||||
@@ -47,10 +47,22 @@ graph TD
|
||||
|
||||
### 数据流向
|
||||
|
||||
```
|
||||
容器 A (172.17.0.2) → docker0 → 容器 B (172.17.0.3) (容器间通信)
|
||||
容器 A (172.17.0.2) → docker0 → eth0 → 互联网 (访问外网)
|
||||
外部请求 → eth0 → docker0 → 容器 A (被外部访问,需端口映射)
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph Comm1 ["容器间通信"]
|
||||
direction LR
|
||||
C1A["容器 A (172.17.0.2)"] --> D0A["docker0"] --> C1B["容器 B (172.17.0.3)"]
|
||||
end
|
||||
|
||||
subgraph Comm2 ["访问外网"]
|
||||
direction LR
|
||||
C2A["容器 A (172.17.0.2)"] --> D0B["docker0"] --> Eth0A["eth0"] --> InternetA["互联网"]
|
||||
end
|
||||
|
||||
subgraph Comm3 ["被外部访问,需端口映射"]
|
||||
direction LR
|
||||
Req["外部请求"] --> Eth0B["eth0"] --> D0C["docker0"] --> C3A["容器 A"]
|
||||
end
|
||||
```
|
||||
|
||||
---
|
||||
@@ -124,17 +136,12 @@ PING db (172.18.0.3): 56 data bytes
|
||||
|
||||
自定义网络自动提供 DNS 服务:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ mynet 网络 │
|
||||
│ │
|
||||
│ ┌─────────┐ DNS ┌─────────┐ │
|
||||
│ │ web │ ──── "db" → 172.18.0.3 ───► │ db │ │
|
||||
│ │172.18.0.2│ │172.18.0.3│ │
|
||||
│ └─────────┘ └─────────┘ │
|
||||
│ │
|
||||
│ web 容器可以用 "db" 作为主机名访问 db 容器 │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph MyNet ["mynet 网络 : web 容器可以用 'db' 作为主机名访问 db 容器"]
|
||||
direction LR
|
||||
Web["web<br/>172.18.0.2"] -- "DNS: 'db' → 172.18.0.3" --> DB["db<br/>172.18.0.3"]
|
||||
end
|
||||
```
|
||||
|
||||
---
|
||||
@@ -231,17 +238,10 @@ $ docker port mycontainer
|
||||
|
||||
### 端口映射示意图
|
||||
|
||||
```
|
||||
外部请求 http://宿主机IP:8080
|
||||
│
|
||||
▼
|
||||
┌─────────────┐
|
||||
│ 宿主机:8080 │ ─── iptables NAT ───┐
|
||||
└─────────────┘ │
|
||||
▼
|
||||
┌───────────────┐
|
||||
│ 容器 nginx:80 │
|
||||
└───────────────┘
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Req["外部请求 http://宿主机IP:8080"] --> Host["宿主机:8080"]
|
||||
Host -- "iptables NAT" --> Container["容器 nginx:80"]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -98,16 +98,3 @@ $ docker run -h myweb nginx
|
||||
- **解决**:使用自定义网络 (`docker network create ...`)。
|
||||
|
||||
---
|
||||
|
||||
### 本章小结
|
||||
|
||||
| 场景 | DNS 行为 | 备注 |
|
||||
|------|----------|------|
|
||||
| **默认网络** | 继承宿主机 | 不支持容器名解析 |
|
||||
| **自定义网络** | Docker 嵌入式 DNS | ✅ 支持容器名解析 |
|
||||
| **手动指定** | 使用 `--dns` | 覆盖默认配置 |
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [网络模式](README.md):Docker 网络概览
|
||||
- [端口映射](port_mapping.md):外部访问
|
||||
|
||||
@@ -9,19 +9,11 @@
|
||||
|
||||
为了让外部(如你的浏览器、其他局域网机器)访问容器内的服务,我们需要将容器的端口**映射**到宿主机的端口。
|
||||
|
||||
```
|
||||
外部用户 (Browser)
|
||||
│
|
||||
▼
|
||||
宿主机 (localhost:8080)
|
||||
│
|
||||
┌────┴────┐ 端口映射
|
||||
│ Docker │ (8080 -> 80)
|
||||
│ Proxy │
|
||||
└────┬────┘
|
||||
│
|
||||
▼
|
||||
容器 (Class B: 80)
|
||||
```mermaid
|
||||
flowchart TD
|
||||
User["外部用户 (Browser)"] --> Host["宿主机 (localhost:8080)"]
|
||||
Host --> Proxy["Docker Proxy<br/>端口映射 (8080 -> 80)"]
|
||||
Proxy --> Container["容器 (Class B: 80)"]
|
||||
```
|
||||
|
||||
---
|
||||
@@ -152,17 +144,3 @@ iptables -t nat -A DOCKER -p tcp --dport 8080 -j DNAT --to-destination 172.17.0.
|
||||
这也是为什么你在容器内部看到的访问来源 IP 通常是网关 IP(如 172.17.0.1),而不是真实的外部 Client IP(除非使用 host 网络模式)。
|
||||
|
||||
---
|
||||
|
||||
### 本章小结
|
||||
|
||||
| 要点 | 说明 |
|
||||
|------|------|
|
||||
| **-p** | 指定端口映射(常用),如 `8080:80` |
|
||||
| **-P** | 随机映射所有 EXPOSE 的端口 |
|
||||
| **安全性** | 默认监听所有 IP,敏感服务应绑定 `127.0.0.1` |
|
||||
| **查看** | 使用 `docker port` 或 `docker ps` |
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [EXPOSE 指令](../../07_dockerfile/7.9_expose.md):在 Dockerfile 中声明端口
|
||||
- [网络模式](README.md):Host 模式不需要端口映射
|
||||
|
||||
24
08_data_network/network/summary.md
Normal file
24
08_data_network/network/summary.md
Normal file
@@ -0,0 +1,24 @@
|
||||
## 本章小结
|
||||
|
||||
| 场景 | DNS 行为 | 备注 |
|
||||
|------|----------|------|
|
||||
| **默认网络** | 继承宿主机 | 不支持容器名解析 |
|
||||
| **自定义网络** | Docker 嵌入式 DNS | ✅ 支持容器名解析 |
|
||||
| **手动指定** | 使用 `--dns` | 覆盖默认配置 |
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [网络模式](README.md):Docker 网络概览
|
||||
- [端口映射](port_mapping.md):外部访问
|
||||
|
||||
| 要点 | 说明 |
|
||||
|------|------|
|
||||
| **-p** | 指定端口映射(常用),如 `8080:80` |
|
||||
| **-P** | 随机映射所有 EXPOSE 的端口 |
|
||||
| **安全性** | 默认监听所有 IP,敏感服务应绑定 `127.0.0.1` |
|
||||
| **查看** | 使用 `docker port` 或 `docker ps` |
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [EXPOSE 指令](../../07_dockerfile/7.9_expose.md):在 Dockerfile 中声明端口
|
||||
- [网络模式](README.md):Host 模式不需要端口映射
|
||||
Reference in New Issue
Block a user