mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-26 11:45:33 +00:00
Remove blank lines after code block markers
This commit is contained in:
@@ -6,7 +6,6 @@
|
||||
VOLUME ["/路径1", "/路径2"]
|
||||
VOLUME /路径
|
||||
```
|
||||
|
||||
`VOLUME` 指令创建挂载点,并标记为外部挂载的卷。
|
||||
|
||||
---
|
||||
@@ -38,7 +37,6 @@ flowchart LR
|
||||
Volume ~~~ Result2
|
||||
end
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.8.3 基本用法
|
||||
@@ -49,14 +47,12 @@ flowchart LR
|
||||
FROM mysql:8.0
|
||||
VOLUME /var/lib/mysql
|
||||
```
|
||||
|
||||
#### 定义多个卷
|
||||
|
||||
```docker
|
||||
FROM myapp
|
||||
VOLUME ["/data", "/logs", "/config"]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.8.4 VOLUME 的行为
|
||||
@@ -71,25 +67,20 @@ $ docker volume ls
|
||||
DRIVER VOLUME NAME
|
||||
local a1b2c3d4e5f6... # 自动创建的匿名卷
|
||||
```
|
||||
|
||||
#### 2. 可被命名卷覆盖
|
||||
|
||||
```bash
|
||||
|
||||
## 使用命名卷替代匿名卷
|
||||
|
||||
$ docker run -v mysql_data:/var/lib/mysql mysql:8.0
|
||||
```
|
||||
|
||||
#### 3. 可被 Bind Mount 覆盖
|
||||
|
||||
```bash
|
||||
|
||||
## 使用宿主机目录替代
|
||||
|
||||
$ docker run -v /my/data:/var/lib/mysql mysql:8.0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.8.5 VOLUME 在构建时的特殊行为
|
||||
@@ -104,7 +95,6 @@ VOLUME /data
|
||||
|
||||
RUN echo "hello" > /data/test.txt
|
||||
```
|
||||
|
||||
**原因**:在构建过程中,VOLUME 指令会为该目录创建一个临时的匿名卷。后续 RUN 指令对该目录的写入实际发生在这个临时卷中,而非镜像层。当该 RUN 指令结束后,临时卷被丢弃,因此写入的内容不会保存到最终镜像中。注意:这与容器运行时创建的匿名卷是不同的——运行时创建的卷会在容器生命周期内持续存在。
|
||||
|
||||
#### 正确做法
|
||||
@@ -120,7 +110,6 @@ RUN mkdir -p /data && echo "hello" > /data/test.txt
|
||||
|
||||
VOLUME /data
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.8.6 常见使用场景
|
||||
@@ -131,27 +120,23 @@ VOLUME /data
|
||||
FROM postgres:16
|
||||
VOLUME /var/lib/postgresql/data
|
||||
```
|
||||
|
||||
#### 日志目录
|
||||
|
||||
```docker
|
||||
FROM nginx
|
||||
VOLUME /var/log/nginx
|
||||
```
|
||||
|
||||
#### 上传文件目录
|
||||
|
||||
```docker
|
||||
FROM myapp
|
||||
VOLUME /app/uploads
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.8.7 查看 VOLUME 定义
|
||||
|
||||
```bash
|
||||
|
||||
## 查看镜像定义的 VOLUME
|
||||
|
||||
$ docker inspect mysql:8.0 --format '{{json .Config.Volumes}}' | jq
|
||||
@@ -163,7 +148,6 @@ $ docker inspect mysql:8.0 --format '{{json .Config.Volumes}}' | jq
|
||||
|
||||
$ docker inspect mycontainer --format '{{json .Mounts}}' | jq
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.8.8 VOLUME vs docker run -v
|
||||
@@ -196,7 +180,6 @@ services:
|
||||
volumes:
|
||||
postgres_data: # 声明命名卷
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.8.10 安全注意事项
|
||||
@@ -204,7 +187,6 @@ volumes:
|
||||
#### 匿名卷可能导致数据丢失
|
||||
|
||||
```bash
|
||||
|
||||
## 使用 --rm 运行的容器,匿名卷会在容器删除时一起删除
|
||||
|
||||
$ docker run --rm mysql:8.0
|
||||
@@ -213,13 +195,11 @@ $ docker run --rm mysql:8.0
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
**解决**:始终使用命名卷
|
||||
|
||||
```bash
|
||||
$ docker run -v mysql_data:/var/lib/mysql mysql:8.0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.8.11 最佳实践
|
||||
@@ -227,17 +207,14 @@ $ docker run -v mysql_data:/var/lib/mysql mysql:8.0
|
||||
#### 1. 定义必须持久化的路径
|
||||
|
||||
```docker
|
||||
|
||||
## 数据库必须使用卷
|
||||
|
||||
FROM postgres:16
|
||||
VOLUME /var/lib/postgresql/data
|
||||
```
|
||||
|
||||
#### 2. 不要在 VOLUME 后修改目录
|
||||
|
||||
```docker
|
||||
|
||||
## ❌ 避免
|
||||
|
||||
VOLUME /app/data
|
||||
@@ -248,11 +225,9 @@ RUN cp init-data.json /app/data/
|
||||
RUN mkdir -p /app/data && cp init-data.json /app/data/
|
||||
VOLUME /app/data
|
||||
```
|
||||
|
||||
#### 3. 文档中说明 VOLUME 用途
|
||||
|
||||
```docker
|
||||
|
||||
## 持久化用户上传的文件
|
||||
|
||||
VOLUME /app/uploads
|
||||
@@ -261,5 +236,4 @@ VOLUME /app/uploads
|
||||
|
||||
VOLUME /var/lib/mysql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user