数据持久化
数据卷
默认情况下,容器被删除,容器中数据也会随着一起删除。这对于某些重要的数据是绝对不允许的。此时就需要对数据进行持久化。数据卷
是一个可以提供给一个或者多个容器使用的特殊目录,它绕过 UFS,能提供以下特性:
- 多个容器可以共享和重用。
- 对数据卷的修改会马上生效。
- 对数据卷的更新不会影响镜像。
- 数据卷会一直存在,即使删除容器。
常用的数据卷操作命令:
1 | # 创建一个数据卷 |
如图所示:
启动一个挂载了数据卷的容器:
1 | docker container run -d --mount source=demo02_volume,target=/usr/share/nginx/html --name demo02 nginx |
如图所示 :
配置说明:
--mount
:用于标记挂载数据卷到容器中,可以有多个。source
:指定数据卷,如果数据卷不存在,则会自动创建。target
:指定容器内挂载的目录。
查看容器相关信息:
1 | docker container inspect demo02 |
其中挂载部分内容如下
数据卷是用来持久化容器数据的,它的生命周期独立于容器之外。
如果在删除容器的时候想要一并删除存储卷的话,只需要docker container rm -v
即可。
挂载主机目录和文件
使用--mount
参数除了能够挂载数据卷,还能挂载本机的目录到容器中。
1 | docker run -d --mount type=bind,source=/tmp,target=/usr/share/nginx/html,readonly --name demo03 nginx |
需要注意:
- 默认情况下,
--mount
挂载的数据卷volume
,如果需要挂载目录,需要指定type=bind
。 - source 在 bind 挂载中必须事先存在。
- 在挂载最后可以加上
readonly
,标识容器对该目录只读。
此时进入容器测试:
1 | docker container exec -it demo03 /bin/bash |
可以发现,文件是宿主机的 /tmp 下面的文件,并且只读无法创建文件。
当然,也可以单独只挂载某个文件,但是前提是这个文件事先得存在:
1 | docker container run -d --mount type=bind,source=/tmp/1.txt,target=/root/.bash_history --name demo04 nginx |
历史命令就能被记录到本地。
其它挂载方式
除了--mount
以外,还有-v
,--volume
的方式挂载数据卷,使用方法类似。示例:
1 | # 挂载目录并只读 |
使用方法类似,而且在Dockerfile
中的VOLUME
指令就能定义。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 南山结庐!
评论