欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

五、docker数据卷

程序员文章站 2022-04-18 20:58:17
...

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

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

数据卷

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

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

创建一个数据卷

docker volume create my-vol

查看所有数据卷

docker volume ls

查看指定数据卷的信息

docker volume inspect my-vol

五、docker数据卷

主机的挂载点为:/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数据卷

验证效果

主机的/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数据卷

验证效果

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

 

Dockerfile方式挂载volume

Dockerfile文件加上

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

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

docker inspect 容器名/id

五、docker数据卷

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