时间:2021-05-02
默认容器的数据的读写发生在容器的存储层,当容器被删除时其上的数据将会丢失。所以我们应该尽量保证容器存储层不发生写操作,为了实现数据的持久化存储我们需要选择一种方案来保存数据,当前有以下几种方式:
下图展示了这三种技术:
volumes
volumes(数据卷)是一个可供一个或多个容器使用的位于宿主机上特殊目录,它拥有以下特性:
使用数据卷的目的是持久化容器中的数据,以在容器间共享或者防止数据丢失(写入容器存储层的数据会丢失)。
使用数据卷的步骤一般分为两步:
volume管理
创建一个volume:
? 1 $ docker volume create my-vol查看volumes:
? 1 2 $ docker volume ls local my-vol ? 1 2 3 4 5 6 7 8 9 10 11 $ 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:
? 1 $ docker volume rm my-vol或者删除所有未使用的volumes:
? 1 docker volume prune挂载数据卷到容器目录
创建了一个volume之后,我们可以在运行容器时通过指定-v或--mount参数来使用该volume:
使用--mount参数:
? 1 2 3 4 $ docker run -d \ --name=nginxtest \ --mount source=nginx-vol,destination=/usr/share/nginx/html \ nginx:latestsource指定volume,destination指定容器内的文件或文件夹。
或者使用-v参数:
? 1 2 3 4 $ 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选项来实现:
? 1 2 3 4 $ docker run -d \ --name=nginxtest \ --mount source=nginx-vol,destination=/usr/share/nginx/html,readonly \ nginx:latest或者使用-v参数:
? 1 2 3 4 $ docker run -d \ --name=nginxtest \ -v nginx-vol:/usr/share/nginx/html:ro \ nginx:latestvolumes使用场景
请参考这篇文章:docker数据存储总结
参考文章
https://docs.docker.com/storage/volumes/#share-data-among-machines
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://www.jianshu.com/p/c763df5a3f8b
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
阅读本文前,希望你已经对volumes有了初步的了解,具体可以参考这篇文章:docker数据存储之volumes详解默认容器的数据的读写发生在容器的存储层,当容
阅读本文前,希望你已经对volumes,bindmounts和tmpfsmounts有了初步的了解,具体可以参考以下文章:docker数据存储之volumesd
阅读本文前,希望你已经对volumes和bindmounts有了初步的了解,具体可以参考以下文章:docker数据持久化之volumesdocker数据持久化之
docker-compose.yml文件中允许使用'./'相对路径version:'3'...volumes:-./init-mongo.js:/docker-
只显示Docker容器挂载目录信息dockerinspect--format"{{.Config.Volumes}}"369a1376f78c显示Docker容