Docker 数据卷

@bingoogolapple 2017-01-19 08:50:59发表于 bingoogolapple/bingoogolapple.github.io Docker

基础知识

  • 数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问
  • 数据卷设计的目的,在于数据的永久化,它完全独立于容器的生命周期,因此,Docker 不会再容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制对容器引用的数据卷进行处理
  • 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中
  • 数据卷可以在容器之间重用
  • 可以对数据卷里的内容直接进行修改
  • 数据卷的变化不会影响镜像的更新
  • 数据卷会一直存在,即使挂载数据卷的容器已经被删除

如果本机中不存在 ~/datavolume 这个目录,或者容器中不存在 /data 这个目录,在 docker run 命令执行后会自动创建该目录

docker run -it --name tv1 -v ~/datavolume:/data bingoogolapple/bga-ubuntu

为数据卷添加访问权限。可以通过 docker inspect tv2 看到 Mounts 下的 RW 为 false

docker run -it --name tv2 -v ~/datavolume:/data:ro bingoogolapple/bga-ubuntu

Dockerfile 中通过 VOLUME 来指定数据卷,Dockerfile 中创建的数据卷不能映射到已经存在的本地文件目录中

FROM bingoogolapple/bga-ubuntu:latest
MAINTAINER bingoogolapple "bingoogolapple@gmail.com"
VOLUME ["/datavolume1","/datavolume2"]


docker build -t bga/tv .

运行同样镜像的不同容器创建的数据卷是不一样的

docker run -it --name tv3 bga/tv
docker run -it --name tv4 bga/tv

docker inspect -f {{.Mounts}} tv4
docker inspect -f {{.Mounts}} tv4