mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 08:27:25 +00:00
Fix guide issues
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
### 8.2.1 什么是绑定挂载
|
||||
|
||||
Bind Mount (绑定挂载) 将 **宿主机的目录或文件** 直接挂载到容器中。容器可以读写宿主机的文件系统。
|
||||
Bind Mount (绑定挂载) 将 **Docker daemon 所在主机** 上的目录或文件直接挂载到容器中。容器可以读写这台主机上的文件系统。
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
@@ -51,7 +51,7 @@ flowchart LR
|
||||
|
||||
### 8.2.3 基本语法
|
||||
|
||||
#### 使用 --mount:推荐
|
||||
#### 使用 `--mount`:推荐
|
||||
|
||||
```bash
|
||||
$ docker run -d \
|
||||
@@ -59,7 +59,7 @@ $ docker run -d \
|
||||
nginx
|
||||
```
|
||||
|
||||
#### 使用 -v:简写
|
||||
#### 使用 `-v`:简写
|
||||
|
||||
```bash
|
||||
$ docker run -d \
|
||||
@@ -75,7 +75,7 @@ $ docker run -d \
|
||||
| 路径不存在时 | 直接报错 (Fail Fast) | 静默自动创建 **目录** |
|
||||
| 推荐程度 | ✅ 推荐 | 常用 |
|
||||
|
||||
> **⚠️ 陷阱**:如果不小心挂载了一个不存在的宿主机路径,使用 `-v` 会在宿主机上静默创建一个 **空目录**(即使你本来想挂载的是一个文件),这常常会导致权限错误或应用无法正常读取。这也正是为什么 Docker 官方更推荐使用 `--mount` 的原因:它会遵循“Fail Fast”原则直接报错,避免弄巧成拙。
|
||||
> **⚠️ 陷阱**:如果不小心挂载了一个不存在的主机路径,使用 `-v` 会在 **daemon 主机** 上静默创建一个空目录。对于本地 Docker Desktop 用户,这个主机通常就是本机;对于远程 daemon,这个主机就是远程机器。这也是 Docker 官方更推荐使用 `--mount` 的原因:它会直接报错,避免因路径拼写错误而挂错位置。
|
||||
|
||||
---
|
||||
|
||||
@@ -213,7 +213,7 @@ $ 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` (会自动创建)
|
||||
**解决**:确保源路径存在。若你确实需要自动创建目录,可改用 `-v`,但要先确认创建位置就是你想要的主机路径。
|
||||
|
||||
#### Q:权限问题
|
||||
|
||||
@@ -235,7 +235,7 @@ $ docker run -u $(id -u):$(id -g) ...
|
||||
|
||||
#### Q:macOS/Windows 性能问题
|
||||
|
||||
在 Docker Desktop 上,Bind Mount 性能较差 (需要跨文件系统同步):
|
||||
在 Docker Desktop 上,Bind Mount 性能通常不如 Volume,因为数据需要在宿主机文件系统和 Linux VM 之间同步:
|
||||
|
||||
```bash
|
||||
## 使用 :cached 或 :delegated 提高性能(macOS)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
## 8.3 tmpfs 挂载
|
||||
|
||||
`tmpfs` 挂载会把数据放在宿主机内存中,而不是写入容器可写层或数据卷。
|
||||
`tmpfs` 挂载会把数据放在内存中,而不是写入容器可写层或数据卷。它只适用于 Linux 语义的容器环境,适合需要快速读写但不要求持久化的数据。
|
||||
|
||||
### 8.3.1 适用场景
|
||||
|
||||
@@ -20,13 +20,15 @@ $ docker run --mount type=tmpfs,destination=/run,tmpfs-size=67108864,tmpfs-mode=
|
||||
```bash
|
||||
$ docker run --tmpfs /run:size=64m nginx
|
||||
```
|
||||
> **注意**:`--tmpfs` 支持的选项有限,主要为 `size` 和 `mode`。如果需要更精细的控制(如 `noexec`、`nosuid`),推荐使用 `--mount` 语法并通过 `tmpfs-mode` 参数设置权限。
|
||||
> **注意**:`--tmpfs` 更适合简单场景;如果你希望显式描述挂载点、大小和权限,`--mount type=tmpfs,...` 的可读性更好,也更便于后续维护。
|
||||
|
||||
### 8.3.3 注意事项
|
||||
|
||||
- 容器停止后,`tmpfs` 数据会丢失。
|
||||
- `tmpfs` 占用宿主机内存,建议显式限制大小。
|
||||
- 不适合需要持久化的数据。
|
||||
- `tmpfs` 不适合多个容器共享同一份数据,也不适合当作跨重启的缓存层。
|
||||
- 在内存压力较高时,部分数据可能受系统交换机制影响,因此不要把 `tmpfs` 当作绝对不会落盘的安全边界。
|
||||
|
||||
### 8.3.4 与 Volume / Bind Mount 对比
|
||||
|
||||
|
||||
Reference in New Issue
Block a user