Docker数据存储之Volumes详解

2025-05-27 0 88

默认容器的数据的读写发生在容器的存储层,当容器被删除时其上的数据将会丢失。所以我们应该尽量保证容器存储层不发生写操作,为了实现数据的持久化存储我们需要选择一种方案来保存数据,当前有以下几种方式:

  • volumes
  • bind mounts
  • tmpfs mounts

下图展示了这三种技术:

Docker数据存储之Volumes详解

volumes

volumes(数据卷)是一个可供一个或多个容器使用的位于宿主机上特殊目录,它拥有以下特性:

  • 数据卷可以在容器间共享和重用
  • 对数据卷的写入操作,不会对镜像有任何影响
  • 数据卷默认会一直存在,即使容器被删除

使用数据卷的目的是持久化容器中的数据,以在容器间共享或者防止数据丢失(写入容器存储层的数据会丢失)。

使用数据卷的步骤一般分为两步:

  1. 创建一个数据卷
  2. 使用-v或–mount参数将数据卷挂载容器指定目录中,这样所有该容器针对该指定目录的写操作都会保存在宿主机上的volume中。

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:latest

source指定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:latest

volumes使用场景

请参考这篇文章:docker数据存储总结

参考文章

https://docs.docker.com/storage/volumes/#share-data-among-machines

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对快网idc的支持。如果你想了解更多相关内容请查看下面相关链接

原文链接:https://www.jianshu.com/p/c763df5a3f8b

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 行业资讯 Docker数据存储之Volumes详解 https://www.kuaiidc.com/67732.html

相关文章

发表评论
暂无评论