Remove blank lines after code block markers

This commit is contained in:
yeasy
2026-03-21 22:36:09 -07:00
parent 312f8fea42
commit 9ac19d79ee
132 changed files with 0 additions and 1517 deletions

View File

@@ -10,7 +10,6 @@ flowchart LR
Write --> Delete[容器删除]
Delete -->|数据都在容器 writable 层| Lost[DATA LOST! ❌]
```
数据卷 (Volume) 解决了这个问题它的生命周期独立于容器
---
@@ -42,7 +41,6 @@ graph TD
Lifecycle[生命周期 = 容器生命周期] -.-> Container
Delete[容器删除] -->|导致| DataLost[数据丢失 ❌]
```
#### 数据卷推荐
```mermaid
@@ -58,7 +56,6 @@ graph TD
AppDir == 挂载 ==> Volume
Delete[容器删除] -.->|不会影响| Volume
```
---
### 8.1.4 数据卷基本操作
@@ -68,7 +65,6 @@ graph TD
```bash
$ docker volume create my-vol
```
#### 列出所有数据卷
```bash
@@ -78,7 +74,6 @@ local my-vol
local postgres_data
local redis_data
```
#### 查看数据卷详情
```bash
@@ -95,7 +90,6 @@ $ docker volume inspect my-vol
}
]
```
**关键字段**
- `Mountpoint`数据卷在宿主机上的实际存储位置
@@ -113,7 +107,6 @@ $ docker run -d \
--mount source=my-vol,target=/usr/share/nginx/html \
nginx
```
**参数说明**
| 参数 | 说明 |
@@ -130,7 +123,6 @@ $ docker run -d \
-v my-vol:/usr/share/nginx/html \
nginx
```
**格式**`-v 数据卷名:容器路径[:选项]`
#### 两种方式对比
@@ -147,7 +139,6 @@ $ docker run -d \
#### 只读挂载
```bash
## --mount 方式
$ docker run -d \
@@ -160,7 +151,6 @@ $ docker run -d \
-v my-vol:/data:ro \
nginx
```
---
### 8.1.6 使用场景示例
@@ -168,7 +158,6 @@ $ docker run -d \
#### 场景一数据库持久化
```bash
## 创建数据卷
$ docker volume create postgres_data
@@ -193,11 +182,9 @@ $ docker run -d \
-v postgres_data:/var/lib/postgresql/data \
postgres:16
```
#### 场景二多容器共享数据
```bash
## 创建共享数据卷
$ docker volume create shared-data
@@ -214,11 +201,9 @@ $ docker run --rm \
-v shared-data:/data \
alpine cat /data/log.txt
```
#### 场景三配置文件持久化
```bash
## 将 nginx 配置存储在数据卷中
$ docker run -d \
@@ -227,7 +212,6 @@ $ docker run -d \
-p 80:80 \
nginx
```
---
### 8.1.7 数据卷管理
@@ -235,7 +219,6 @@ $ docker run -d \
#### 删除数据卷
```bash
## 删除指定数据卷
$ docker volume rm my-vol
@@ -244,11 +227,9 @@ $ docker volume rm my-vol
$ docker rm -v container_name
```
#### 清理未使用的数据卷
```bash
## 查看未被任何容器使用的数据卷
$ docker volume ls -f dangling=true
@@ -261,7 +242,6 @@ $ docker volume prune
$ docker volume prune -f
```
> **注意**数据卷不会自动垃圾回收长期运行的系统应定期清理无用数据卷
---
@@ -271,7 +251,6 @@ $ docker volume prune -f
#### 备份数据卷
```bash
## 使用临时容器挂载数据卷,打包备份
$ docker run --rm \
@@ -279,7 +258,6 @@ $ docker run --rm \
-v $(pwd):/backup \
alpine tar czf /backup/my-vol-backup.tar.gz -C /source .
```
**原理**
1. 创建临时容器
@@ -290,7 +268,6 @@ $ docker run --rm \
#### 恢复数据卷
```bash
## 创建新数据卷
$ docker volume create my-vol-restored
@@ -302,7 +279,6 @@ $ docker run --rm \
-v $(pwd):/backup:ro \
alpine tar xzf /backup/my-vol-backup.tar.gz -C /target
```
#### 备份脚本示例
```bash
@@ -321,7 +297,6 @@ docker run --rm \
echo "Backed up ${VOLUME_NAME} to ${BACKUP_DIR}/${VOLUME_NAME}_${TIMESTAMP}.tar.gz"
```
---
### 8.1.9 数据卷 vs 绑定挂载
@@ -337,7 +312,6 @@ Docker 有两种主要的数据持久化方式:
| **备份** | 需要工具 | 直接访问文件 |
```bash
## 数据卷
$ docker run -v mydata:/app/data nginx
@@ -346,7 +320,6 @@ $ docker run -v mydata:/app/data nginx
$ docker run -v /host/path:/app/data nginx
```
详见[绑定挂载](8.2_bind-mounts.md)章节
---
@@ -358,11 +331,9 @@ $ docker run -v /host/path:/app/data nginx
```bash
$ docker inspect container_name --format '{{json .Mounts}}' | jq
```
#### Q数据卷的数据在哪里
```bash
## 查看数据卷详情
$ docker volume inspect my-vol
@@ -371,7 +342,6 @@ $ docker volume inspect my-vol
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data"
```
> **注意**不建议直接修改 Mountpoint 中的文件应通过容器操作
#### Q如何在不同机器间迁移数据卷

View File

@@ -16,7 +16,6 @@ flowchart LR
Dir1 <-->|Bind Mount| Dir2
```
目录结构同一份文件
```text
/home/user/code/ (或 /usr/share/nginx/html/)
@@ -24,7 +23,6 @@ flowchart LR
├── style.css
└── app.js
```
---
### 8.2.2 Bind Mount vs Volume
@@ -60,7 +58,6 @@ $ docker run -d \
--mount type=bind,source=/宿主机路径,target=/容器路径 \
nginx
```
#### 使用 -v简写
```bash
@@ -68,7 +65,6 @@ $ docker run -d \
-v /宿主机路径:/容器路径 \
nginx
```
#### 两种语法对比
| 特性 | --mount | -v |
@@ -86,7 +82,6 @@ $ docker run -d \
#### 场景一开发环境代码同步
```bash
## 将本地代码目录挂载到容器
$ docker run -d \
@@ -102,40 +97,33 @@ $ echo "Hello" > src/index.html
...
```
#### 场景二配置文件挂载
```bash
## 挂载自定义 nginx 配置
$ docker run -d \
--mount type=bind,source=/path/to/nginx.conf,target=/etc/nginx/nginx.conf,readonly \
nginx
```
#### 场景三日志收集
```bash
## 将容器日志输出到宿主机目录
$ docker run -d \
--mount type=bind,source=/var/log/myapp,target=/app/logs \
myapp
```
#### 场景四共享 SSH 密钥
```bash
## 挂载 SSH 密钥(只读)
$ docker run --rm -it \
--mount type=bind,source=$HOME/.ssh,target=/root/.ssh,readonly \
alpine ssh user@remote
```
---
### 8.2.5 只读挂载
@@ -143,7 +131,6 @@ $ docker run --rm -it \
防止容器修改宿主机文件
```bash
## --mount 语法
$ docker run -d \
@@ -156,20 +143,17 @@ $ docker run -d \
-v /config:/app/config:ro \
myapp
```
容器内尝试写入会报错
```bash
$ touch /app/config/new.txt
touch: /app/config/new.txt: Read-only file system
```
---
### 8.2.6 挂载单个文件
```bash
## 挂载 bash 历史记录
$ docker run --rm -it \
@@ -182,7 +166,6 @@ $ docker run -d \
--mount type=bind,source=/path/to/my.cnf,target=/etc/mysql/my.cnf \
mysql
```
> **注意**挂载单个文件时如果宿主机上的文件被编辑器替换 (而非原地修改)容器内仍是旧文件的 inode建议重启容器或挂载目录
---
@@ -192,7 +175,6 @@ $ docker run -d \
```bash
$ docker inspect mycontainer --format '{{json .Mounts}}' | jq
```
输出
```json
@@ -207,7 +189,6 @@ $ docker inspect mycontainer --format '{{json .Mounts}}' | jq
}
]
```
| 字段 | 说明 |
|------|------|
| `Type` | 挂载类型 (bind)|
@@ -227,7 +208,6 @@ $ docker run --mount type=bind,source=/not/exist,target=/app nginx
docker: Error response from daemon: invalid mount config for type "bind":
bind source path does not exist: /not/exist
```
**解决**确保源路径存在或改用 `-v` (会自动创建)
#### Q权限问题
@@ -235,7 +215,6 @@ bind source path does not exist: /not/exist
容器内用户可能无权访问挂载的文件
```bash
## 方法1确保宿主机文件权限允许容器用户访问
$ chmod -R 755 /path/to/data
@@ -248,18 +227,15 @@ $ docker run -u root ...
$ docker run -u $(id -u):$(id -g) ...
```
#### QmacOS/Windows 性能问题
Docker Desktop Bind Mount 性能较差 (需要跨文件系统同步)
```bash
## 使用 :cached 或 :delegated 提高性能macOS
$ docker run -v /host/path:/container/path:cached myapp
```
| 选项 | 说明 |
|------|------|
| `:cached` | 宿主机权威容器读取可能延迟 |
@@ -273,31 +249,25 @@ $ docker run -v /host/path:/container/path:cached myapp
#### 1. 开发环境使用 Bind Mount
```bash
## 代码热更新
$ docker run -v $(pwd):/app -p 3000:3000 node npm run dev
```
#### 2. 生产环境使用 Volume
```bash
## 数据持久化
$ docker run -v mysql_data:/var/lib/mysql mysql
```
#### 3. 配置文件使用只读挂载
```bash
$ docker run -v /config/nginx.conf:/etc/nginx/nginx.conf:ro nginx
```
#### 4. 注意路径安全
```bash
## ❌ 危险:挂载根目录或敏感目录
$ docker run -v /:/host ...
@@ -306,5 +276,4 @@ $ docker run -v /:/host ...
$ docker run -v /app/data:/data ...
```
---

View File

@@ -15,13 +15,11 @@
```bash
$ docker run --mount type=tmpfs,destination=/run,tmpfs-size=67108864,tmpfs-mode=1770 nginx
```
也可以使用 `--tmpfs` 简写语法
```bash
$ docker run --tmpfs /run:size=64m nginx
```
> **注意**`--tmpfs` 支持的选项有限主要为 `size` `mode`如果需要更精细的控制 `noexec``nosuid`推荐使用 `--mount` 语法并通过 `tmpfs-mode` 参数设置权限
### 8.3.3 注意事项