Skip to content

Commit 28c23d0

Browse files
committed
fix(content): harden Docker examples
1 parent 6a55219 commit 28c23d0

6 files changed

Lines changed: 42 additions & 19 deletions

File tree

06_repository/6.1_dockerhub.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,11 @@ Docker Hub 对不同类型用户实施拉取速率限制(基于 6 小时周期
107107
> **⚠️ 警告**:绝不要在脚本或 CI/CD 系统中,直接使用 `-p` 参数传递密码或 Token (类似 `docker login -p xxx`)!这会导致凭证直接暴露在系统的命令历史、进程列表和终端输出中。
108108
109109
1. 在 Docker Hub -> Account Settings -> Security -> Access Tokens 创建 Token (PAT)。
110-
2. 将 Token 通过标准输入 (stdin) 安全传递给 Docker:
110+
2. 将 Token 保存在权限受限的本地文件或 CI secret 中,再通过标准输入 (stdin) 传递给 Docker,避免把真实 Token 写进脚本、命令历史或日志:
111111

112112
```bash
113-
$ echo "dckr_pat_xxxxxxx" | docker login --username username --password-stdin
113+
$ chmod 600 "$HOME/.dockerhub-token"
114+
$ cat "$HOME/.dockerhub-token" | docker login --username username --password-stdin
114115
```
115116

116117
#### 3. 关注镜像漏洞

09_network/9.2_network_types.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ ghi789... none null local
2525

2626
### 9.2.2 Bridge 网络:默认
2727

28-
Bridge 是 Docker 默认使用的网络模式。Docker 启动时会自动创建 `docker0` 虚拟网桥,所有未指定网络的容器都会连接到这个网桥上
28+
Bridge 是 Docker 默认使用的网络模式。在原生 Linux Docker Engine 上,Docker 启动时通常会创建 `docker0` 虚拟网桥,未指定网络的容器会连接到这个网桥上。Docker Desktop 运行在虚拟机内,宿主机上不会直接看到 `docker0`,也不能假设宿主机可直接访问每个容器 IP
2929

3030
核心组件如下:
3131

09_network/9.5_port_mapping.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
容器的网络访问规则如下:
88

99
- **容器之间**:可以通过 IP 或容器名 (自定义网络) 互通。
10-
- **宿主机访问容器**可以通过容器 IP 访问
10+
- **宿主机访问容器**原生 Linux 环境下可按网络配置访问容器 IP;Docker Desktop 上不能依赖容器 IP,应通过端口映射、容器名(容器间)或 `host.docker.internal` 等机制访问
1111
- **外部网络访问容器**:❌ 默认无法直接访问。
1212

1313
为了让外部 (如你的浏览器、其他局域网机器) 访问容器内的服务,我们需要将容器的端口 **映射** 到宿主机的端口。

11_compose/11.8_wordpress.md

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ WordPress 是全球最流行的内容管理系统 (CMS)。使用 Docker Compose
1313
```bash
1414
wordpress/
1515
├── compose.yaml
16-
├── .env # 环境变量(敏感信息)
16+
├── .env # 非敏感环境变量(如版本、端口)
17+
├── secrets/ # 本地密钥文件,生产环境应由密钥管理系统提供
18+
│ ├── db_root_password.txt
19+
│ └── db_password.txt
1720
└── nginx/ # 可选:反向代理配置
1821
└── nginx.conf
1922
```
@@ -38,10 +41,13 @@ services:
3841
- --character-set-server=utf8mb4
3942
- --collation-server=utf8mb4_unicode_ci
4043
environment:
41-
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
44+
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
4245
MYSQL_DATABASE: wordpress
4346
MYSQL_USER: wordpress
44-
MYSQL_PASSWORD: ${DB_PASSWORD}
47+
MYSQL_PASSWORD_FILE: /run/secrets/db_password
48+
secrets:
49+
- db_root_password
50+
- db_password
4551
volumes:
4652
- db_data:/var/lib/mysql
4753
networks:
@@ -60,8 +66,10 @@ services:
6066
environment:
6167
WORDPRESS_DB_HOST: db:3306
6268
WORDPRESS_DB_USER: wordpress
63-
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
69+
WORDPRESS_DB_PASSWORD_FILE: /run/secrets/db_password
6470
WORDPRESS_DB_NAME: wordpress
71+
secrets:
72+
- db_password
6573
volumes:
6674
- wp_data:/var/www/html
6775
# 增加上传文件大小限制
@@ -78,20 +86,29 @@ volumes:
7886

7987
networks:
8088
wp_net:
89+
90+
secrets:
91+
db_root_password:
92+
file: ./secrets/db_root_password.txt
93+
db_password:
94+
file: ./secrets/db_password.txt
8195
```
8296
---
8397
8498
### 11.8.3 配置文件详解
8599
86-
#### 1. 环境变量文件 .env
100+
#### 1. 密钥文件
87101
88-
为了安全,不要在 `compose.yaml` 中直接写密码。创建 `.env` 文件
102+
不要把数据库密码写入 `compose.yaml``.env`、命令行或 Git。Compose 官方建议敏感值使用 secrets;本地练习可用只读密钥文件模拟
89103

90-
```ini
91-
DB_ROOT_PASSWORD=somestrongrootpassword
92-
DB_PASSWORD=somestronguserpassword
104+
```bash
105+
mkdir -p secrets
106+
printf '%s\n' 'somestrongrootpassword' > secrets/db_root_password.txt
107+
printf '%s\n' 'somestronguserpassword' > secrets/db_password.txt
108+
chmod 600 secrets/*.txt
93109
```
94-
Compose 会自动读取此同级目录下的文件。
110+
111+
把 `secrets/` 加入 `.gitignore`。生产环境应改用平台密钥管理能力,而不是把真实密码放在项目目录。
95112

96113
#### 2. 数据持久化
97114

13_kubernetes_concepts/13.2_concepts.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
### 13.2.1 节点
2121

22-
`Kubernetes` 中,节点是实际工作的点,节点可以是虚拟机或者物理机器,依赖于一个集群环境。每个节点都有一些必要的服务以运行容器组,并且它们都可以通过主节点来管理。必要服务包括 Docker,kubelet 和代理服务
22+
`Kubernetes` 中,节点是实际工作的点,节点可以是虚拟机或者物理机器,依赖于一个集群环境。每个节点都有一些必要的组件以运行容器组,并且它们都可以通过控制平面来管理。必要组件包括 kubelet、容器运行时(如 containerd 或 CRI-O)和 kube-proxy;Docker 不再是 Kubernetes 节点的默认基线运行时
2323

2424
#### 容器状态
2525

19_observability/19.3_performance_optimization.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,11 @@ docker stats nginx redis
6666
# 一次性输出不进入交互模式
6767
docker stats --no-stream
6868

69-
# 指定刷新间隔(单位:秒,默认 1 秒)
70-
docker stats --no-stream --interval 2
69+
# 每 2 秒采样一次(docker stats 没有 --interval 选项)
70+
while true; do
71+
docker stats --no-stream
72+
sleep 2
73+
done
7174

7275
# 格式化输出(使用 Go 模板)
7376
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" --no-stream
@@ -182,6 +185,8 @@ services:
182185
- '--config.file=/etc/prometheus/prometheus.yml'
183186
- '--storage.tsdb.path=/prometheus'
184187
- '--storage.tsdb.retention.time=30d'
188+
extra_hosts:
189+
- "host.docker.internal:host-gateway"
185190
networks:
186191
- monitoring
187192
@@ -258,7 +263,7 @@ scrape_configs:
258263
259264
- job_name: 'docker'
260265
static_configs:
261-
- targets: ['localhost:9323']
266+
- targets: ['host.docker.internal:9323']
262267
```
263268
**常用的 Prometheus 查询(PromQL):**
264269

@@ -276,7 +281,7 @@ rate(container_network_receive_bytes_total[5m]) / 1024 / 1024
276281
rate(container_network_transmit_bytes_total[5m]) / 1024 / 1024
277282
278283
# 容器磁盘读取速率(MB/s)
279-
rate(container_fs_io_current[5m]) / 1024 / 1024
284+
rate(container_fs_reads_bytes_total[5m]) / 1024 / 1024
280285
281286
# CPU 限流情况
282287
rate(container_cpu_cfs_throttled_seconds_total[5m])

0 commit comments

Comments
 (0)