Docker数据存储之Volumes详解
默许容器的数据的读写产生在容器的存储层,当容器被删除时其上的数据将会遗失。所以我们应当尽量保证容器存储层不产生写操纵,为了实现数据的耐久化存储我们需要选中一种方案来保留数据,目前有下列几种方式:
- Volumes
- Bind mounts
- tmpfs mounts
下图展现了这三种技术:
Volumes
Volumes(数据卷)是一个可供一个或多个容器运用的位于宿主机上特别目录,它具有下列特性:
- 数据卷可以在容器间同享和重用
- 对数据卷的写入操纵,不会对镜像有任何影响
- 数据卷默许会不断存在,即便容器被删除
运用数据卷的目的是耐久化容器中的数据,以在容器间同享或者防止数据遗失(写入容器存储层的数据会遗失)。
运用数据卷的步骤个别分为两步:
- 创建一个数据卷
- 运用-v或--mount参数将数据卷挂载容器指定目录中,这样所有该容器针对该指定目录的写操纵都会保留在宿主机上的Volume中。
Volume治理
创建一个Volume:
$ docker volume create my-vol
查看Volumes:
$ docker volume ls local my-vol
$ docker volume inspect my-vol [ { "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/my-vol/_data", "Name": "my-vol", "Options": {}, "Scope": "local" } ]
我么可以看到创建的Volume my-vol保留在目录/var/lib/docker/volumes/
下,今后所有针对该Volume的写数据都会保留中目录/var/lib/docker/volumes/my-vol/_data
下。
删除一个Volume:
$ docker volume rm my-vol
或者删除所有未运用的Volumes:
docker volume prune
挂载数据卷到容器目录
创建了一个Volume之后,我们可以在运转容器时通过指定-v或--mount参数来运用该Volume:
运用--mount
参数:
$ docker run -d \ --name=nginxtest \ --mount source=nginx-vol,destination=/usr/share/nginx/html \ nginx:latest
source指定volume,destination指定容器内的文件或文件夹。
或者运用-v参数:
$ docker run -d \ --name=nginxtest \ -v nginx-vol:/usr/share/nginx/html \ nginx:latest
挂载成功后,容器从/usr/share/nginx/html目录下读取或写入数据,现实上都是从宿主机的nginx-vol数据卷中读取或写入数据。因而Volumes或Bind mounts也可以看作是容器和宿主机同享文件的一种方式。
-v参数运用冒号分割source和destination,冒号前半局部是source,后半局部是destination。
要是你挂载一个还不存在的数据卷,Docker会主动创建它。(因而创建数据卷那一步非必需)
要是容器中的待挂载的目录不是一个空目录,那么该目录下的文件会被复制到数据卷中。(Bind mounts下,宿主机上的目录总会遮盖容器中的待挂载目录)
-v参数和--mount参数总的来说功能险些雷同,独一的区别是在运转一个service时只能够--mount参数来挂载数据卷。
运用只读数据卷
有些状况下,我们但愿某个数据卷对某个容器来说是只读的,可以通过增加readonly选项来实现:
$ docker run -d \ --name=nginxtest \ --mount source=nginx-vol,destination=/usr/share/nginx/html,readonly \ nginx:latest
或者运用-v参数:
$ docker run -d \ --name=nginxtest \ -v nginx-vol:/usr/share/nginx/html:ro \ nginx:latest
Volumes运用场景
请参考这篇文章:Docker数据存储总结
参考文章
https://docs.docker.com/storage/volumes/#share-data-among-machines
总结
以上就是这篇文章的全部内容了,但愿本文的内容对大家的学习或者工作拥有一定的参考学习价值,感谢大家对脚本之家的支撑。要是你想理解更多相干内容请查看下面相干链接