fix(content): harden Docker practice guide

This commit is contained in:
yeasy
2026-06-16 21:23:21 -07:00
parent f4e684afeb
commit 9fdffa9d91
67 changed files with 343 additions and 278 deletions
+8 -2
View File
@@ -20,7 +20,7 @@ ghi789... none null local
| **host** | 容器直接使用宿主机网络栈 | 需要最高网络性能时 |
| **none** | 禁用网络 | 完全隔离的容器 |
| **overlay** | 跨主机网络 | Docker Swarm 集群 |
| **macvlan** | 容器拥有独立 MAC 地址 | 需要直接接入物理网络 |
| **macvlan** | 容器拥有独立 MAC 地址 | Linux 主机上需要直接接入物理网络 |
| **ipvlan** | 容器共享父接口 MAC独享 IP | 同网段大量容器 MAC 数量受限的网络 |
### 9.2.2 Bridge 网络默认
@@ -45,6 +45,8 @@ $ docker run -d --network host nginx
```
这种模式下网络性能最高但容器之间和宿主机之间没有网络隔离
> 注意host 网络优先用于明确需要高性能或大量端口的 Linux 主机场景Docker Desktop 仅在较新版本中支持且需要在设置中启用使用 host 网络时 `-p` / `--publish` 端口映射不会生效普通 Web 服务默认仍建议使用 bridge 网络并显式发布端口
### 9.2.4 None 网络
使用 `--network none` 参数启动的容器只有 `lo` 回环网卡完全没有外部网络连接适用于只需要运行计算任务不需要网络的容器
@@ -55,7 +57,11 @@ $ docker run -it --network none alpine ip addr
inet 127.0.0.1/8 scope host lo
```
### 9.2.5 数据流向
### 9.2.5 Macvlan 与平台限制
Macvlan 适合少数需要让容器像物理主机一样直接出现在二层网络中的场景它只支持 Linux 主机不支持 Docker Desktop for Mac / Windows也不支持 rootless 模式多数云厂商网络会阻断或限制 macvlan默认情况下macvlan 容器与宿主机直接通信也需要额外路由或接口配置
### 9.2.6 数据流向
容器网络中的数据流向可以分为以下几种情况
+6 -5
View File
@@ -39,10 +39,10 @@ $ docker run -d -p 8080:80 nginx
| 格式 | 含义 | 示例 |
|------|------|------|
| `ip:hostPort:containerPort` | 绑定指定 IP 的特定端口 | `-p 127.0.0.1:8080:80` (仅本机访问) |
| `ip:hostPort:containerPort` | 绑定指定 IP 的特定端口 | `-p 127.0.0.1:8080:80` ( IPv4 本机访问) |
| `ip::containerPort` | 绑定指定 IP 的随机端口 | `-p 127.0.0.1::80` |
| `hostPort:containerPort` | 绑定所有 IP (0.0.0.0) 的特定端口 | `-p 8080:80` (默认) |
| `containerPort` | 绑定所有 IP 的随机端口 | `-p 80` |
| `hostPort:containerPort` | 绑定所有地址通常包括 `0.0.0.0` `[::]`的特定端口 | `-p 8080:80` (默认) |
| `containerPort` | 绑定所有地址的随机端口 | `-p 80` |
#### 2. 随机映射
@@ -93,14 +93,15 @@ abc123456 nginx 0.0.0.0:8080->80/tcp web
#### 1. 限制监听 IP
默认情况下`-p 8080:80` 会监听 `0.0.0.0:8080`这意味着任何人只要能连接你的宿主机 IP就能访问该服务
默认情况下`-p 8080:80` 会监听所有可用地址常见输出包括 `0.0.0.0:8080` `[::]:8080`这意味着任何人只要能连接你的宿主机 IP就能访问该服务
如果不希望对外暴露 (例如数据库服务)应绑定到 `127.0.0.1`
如果不希望对外暴露 (例如数据库服务)应绑定到回环地址IPv4 使用 `127.0.0.1`IPv6 使用 `[::1]`
```bash
## 仅允许本机访问
$ docker run -d -p 127.0.0.1:3306:3306 mysql
$ docker run -d -p '[::1]:3306:3306' mysql
```
#### 2. 避免端口冲突