2021-03-07 15:29:05 +08:00
|
|
|
|
# VOLUME 定义匿名卷
|
2016-11-26 02:02:43 +08:00
|
|
|
|
|
|
|
|
|
格式为:
|
|
|
|
|
|
|
|
|
|
* `VOLUME ["<路径1>", "<路径2>"...]`
|
|
|
|
|
* `VOLUME <路径>`
|
|
|
|
|
|
|
|
|
|
之前我们说过,容器运行时应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中,后面的章节我们会进一步介绍 Docker 卷的概念。为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在 `Dockerfile` 中,我们可以事先指定某些目录挂载为匿名卷,这样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据。
|
|
|
|
|
|
2019-10-29 14:31:45 +08:00
|
|
|
|
```docker
|
2016-11-26 02:02:43 +08:00
|
|
|
|
VOLUME /data
|
|
|
|
|
```
|
|
|
|
|
|
2021-03-11 23:09:37 +08:00
|
|
|
|
这里的 `/data` 目录就会在容器运行时自动挂载为匿名卷,任何向 `/data` 中写入的信息都不会记录进容器存储层,从而保证了容器存储层的无状态化。当然,运行容器时可以覆盖这个挂载设置。比如:
|
2016-11-26 02:02:43 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2021-03-11 23:09:37 +08:00
|
|
|
|
$ docker run -d -v mydata:/data xxxx
|
2016-11-26 02:02:43 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
在这行命令中,就使用了 `mydata` 这个命名卷挂载到了 `/data` 这个位置,替代了 `Dockerfile` 中定义的匿名卷的挂载配置。
|