背景说明

按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者 绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。

解决方案

数据卷

列表

  1. [root@vm1 ~]# docker volume ls

创建

  1. [root@vm1 ~]# docker volume create my-vol

查看

  1. [root@vm1 ~]# docker volume inspect my-vol

使用

  1. [root@vm1 ~]# docker run -d -P \
  2. --name web \
  3. # -v my-vol:/usr/share/nginx/html \
  4. --mount source=my-vol,target=/usr/share/nginx/html \
  5. nginx:alpine

挂载方式

绝对路径

  1. [root@vm1 ~]# docker run -v /home/data:/data tomcat

具名方式

  1. [root@vm1 ~]# docker run -v xxx:/data tomcat
  1. 这里的xxx表示一个数据卷别名,这个别名可以存在也可以不存在,不存在docker首次会自动创建
  2. docker voluem inspect xxx可以查看明细信息
  3. 别名代表了一个docker自身维护的数据卷
  4. 别名宿主机目录默认在/var/lib/docker/volumes/