温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Docker数据存储Volumes怎么管理

发布时间:2022-03-24 16:52:13 来源:亿速云 阅读:165 作者:iii 栏目:web开发

这篇文章主要介绍“Docker数据存储Volumes怎么管理”,在日常操作中,相信很多人在Docker数据存储Volumes怎么管理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Docker数据存储Volumes怎么管理”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

  • volumes

  • bind mounts

  • tmpfs mounts

下图展示了这三种技术:

Docker数据存储Volumes怎么管理

volumes

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

  • 数据卷可以在容器间共享和重用

  • 对数据卷的写入操作,不会对镜像有任何影响

  • 数据卷默认会一直存在,即使容器被删除

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

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

  1. 创建一个数据卷

  2. 使用-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

到此,关于“Docker数据存储Volumes怎么管理”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI