五、docker数据卷

Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式:

  • 数据卷(Volumes)
  • 挂载主机目录 (Bind mounts)
     

数据卷

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除
     

创建一个数据卷

docker volume create my-vol

查看所有数据卷

docker volume ls

查看指定数据卷的信息

docker volume inspect my-vol

五、docker数据卷_第1张图片

主机的挂载点为:/var/lib/docker/volumes/my-vol/_data

启动容器并挂载数据卷

docker run -d --name centoscontainer -v my-vol:/myvol centos /usr/sbin/init
或
docker run -d --name centoscontainer --mount source=my-vol,target=/myvol centos /usr/sbin/init

查看容器的挂载信息

docker inspect centoscontainer

五、docker数据卷_第2张图片

验证效果

主机的/var/lib/docker/volumes/my-vol/_data与/myvol目录数据同步,无论哪边发生变化,数据都会同步,即使容器被删除,主机数据还在

删除数据卷

docker volume rm my-vol

删除容器时并删除数据卷

命令 docker rm -v


删除所有没有挂载容器的数据卷

docker volume prune

 

挂载主机目录

将主机的目录当作数据卷挂载到容器中(少了创建数据卷的步骤),该方式使用docker volume ls查询不到

docker run -d --name centoscontainer -v /hostdir:/myvol centos /usr/sbin/init
或
docker run -d --name centoscontainer type=bind,source=/hostdir,target=/myvol centos /usr/sbin/init

注意:(1)主机目录的路径必须是绝对路径,如果使用 -v 参数时如果本地目录不存在 Docker 会自动为你创建一个文件夹,而使用 --mount 参数时如果主机目录不存在,Docker 会报错

(2)如果将主机和容器目录都改为文件,则将挂载文件

查看容器的挂载信息

docker inspect centoscontainer

五、docker数据卷_第3张图片

验证效果

在主机/hostdir、容器/myvol的数据操作将同步

 

Dockerfile方式挂载volume

Dockerfile文件加上

VOLUME ["/datavolume1", "/datavolume2"]

如果启动容器没有指定挂载主机的目录,则将随机挂载一个主机的目录,查看随机目录:

docker inspect 容器名/id

五、docker数据卷_第4张图片

可以用以上的另外两种方法-v或者--mount指定主机的挂载目录来覆盖默认的随机目录

 

 

你可能感兴趣的:(《Docker,—,从入门到实践》学习笔记)