目录
前言
Docker Volume
能让容器从宿主主机中读取文件或持久化数据到宿主主机内,让容器与容器产生的数据分离开来。你可以简单地把它理解为linux服务器上的挂载点。一个容器可以挂载多个不同的目录。Volume
的生命周期是独立于容器的生命周期之外的,即使容器删除了,volume
也会被保留下来,Docker
也不会因为这个volume
没有被容器使用而回收。在容器中,添加或修改这个文件夹里的文件也不会影响容器的联合文件系统。
一、volume
1 volume 的使用场景
卷是在Docker容器和服务中保存数据的首选方式。卷的一些用例包括:
-
在多个运行容器之间共享数据。如果您没有明确创建它,则会在第一次将其装入容器时创建卷。当该容器停止或被移除时,该卷仍然存在。多个容器可以同时安装相同的卷,无论是读写还是只读。仅当您明确删除卷时才会删除卷。
-
当您想要将容器的数据存储在远程主机或云提供商上而不是本地时。
-
当您需要备份,还原或将数据从一台Docker主机迁移到另一台时,卷是更好的选择。您可以停止使用卷的容器,然后备份卷的目录实现数据的备份和迁移(如/var/lib/docker/volumes/)。
2 volume 基本使用
创建数据卷
docker volume create vol-1
启动一个容器并挂载数据卷
–mount 语法:
–mount type=volume, source=数据卷名, target=容器中的挂载点
type
的值可以是 volume
, bind
,tmpfs
默认是 volume
source
也可以简写成src
target
可以简写成 dst
在用 docker run
命令的时候,使用 --mount
标记来将 数据卷 挂载到容器里。
docker run -itd --mount source=vol-1,target=/tmp --name centos7-1 centos:7
二、bind mount
就是挂载主机目录
与卷相比,绑定安装具有有限的功能。
当您使用绑定挂载时,主机上的文件或目录被挂载到容器中。主机上的文件或目录必须是完整路径。
挂载点不存在时,它会根据需求被创建。
1 方法一(–mount)
$ docker run -it --name web --mount type=bind,source=/src/webapp,target=/opt/webapp/ centos:7 bash
使用 --mount
参数时如果本地目录不存在,Docker 会报错,并且source
指定的本地文件路径必须是据对路径。
Docker 挂载主机目录的默认权限是 读写,用户也可以通过增加 readonly
指定为 只读。
$ docker run -it --name web --mount type=bind,source=/src/webapp,target=/opt/webapp/,readonly centos:7 bash
2 方法二(-v)
docker run -it -v /src/webapp:/opt/webapp centos:7
3 -v和–mount的区别
使用-v
或者 --mount
标志可将绑定挂载和卷挂载到容器中
在Docker 17.06及更高版本中,官方建议使用 --mount
,因为语法更清晰。
三、数据卷操作
1 查看所有数据卷
docker volume ls
2 删除数据卷
docker volume rm 数据卷名称
docker volume rm vol-1
数据卷可能会占据很多空间,可以使用以下命令清理掉没有容器使用的 数据卷。
谨慎操作,这需要你确认现在暂时没有使用数据卷在以后也不会再使用,里面也没有有价值的数据。
$ docker volume prune