背景说明
按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者 绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。
解决方案
数据卷
列表
[root@vm1 ~]# docker volume ls
创建
[root@vm1 ~]# docker volume create my-vol
查看
[root@vm1 ~]# docker volume inspect my-vol
使用
[root@vm1 ~]# docker run -d -P \
--name web \
# -v my-vol:/usr/share/nginx/html \
--mount source=my-vol,target=/usr/share/nginx/html \
nginx:alpine
挂载方式
绝对路径
[root@vm1 ~]# docker run -v /home/data:/data tomcat
具名方式
[root@vm1 ~]# docker run -v xxx:/data tomcat
- 这里的xxx表示一个数据卷别名,这个别名可以存在也可以不存在,不存在docker首次会自动创建
- docker voluem inspect xxx可以查看明细信息
- 别名代表了一个docker自身维护的数据卷
- 别名宿主机目录默认在/var/lib/docker/volumes/