默认容器的数据的读写发生在容器的存储层,当容器被删除时其上的数据将会丢失。所以我们应该尽量保证容器存储层不发生写操作,为了实现数据的持久化存储我们需要选择一种方案来保存数据,当前有以下几种方式:
下图展示了这三种技术:
Volumes
Volumes(数据卷)是一个可供一个或多个容器使用的位于宿主机上特殊目录,它拥有以下特性:
使用数据卷的目的是持久化容器中的数据,以在容器间共享或者防止数据丢失(写入容器存储层的数据会丢失)。
使用数据卷的步骤一般分为两步:
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
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。如果你想了解更多相关内容请查看下面相关链接
本文向大家介绍Docker数据存储之tmpfs mounts详解,包括了Docker数据存储之tmpfs mounts详解的使用技巧和注意事项,需要的朋友参考一下 阅读本文前,希望你已经对Volumes和Bind mounts有了初步的了解,具体可以参考以下文章: Docker数据持久化之Volumes Docker数据持久化之Bind mounts tmpfs mounts Volumes和Bi
本文向大家介绍Docker数据存储之Bind mounts详解,包括了Docker数据存储之Bind mounts详解的使用技巧和注意事项,需要的朋友参考一下 阅读本文前,希望你已经对Volumes有了初步的了解,具体可以参考这篇文章: Docker数据存储之Volumes详解 默认容器的数据的读写发生在容器的存储层,当容器被删除时其上的数据将会丢失。所以我们应该尽量保证容器存储层不发生写操作,为
本文向大家介绍Flutter持久化存储之数据库存储(sqflite)详解,包括了Flutter持久化存储之数据库存储(sqflite)详解的使用技巧和注意事项,需要的朋友参考一下 前言 数据库存储是我们常用的存储方式之一,对大批量数据有增、删、改、查操作需求时,我们就会想到使用数据库,Flutter中提供了一个sqflite插件供我们用于大量数据执行CRUD操作。本篇我们就来一起学习sqflite
1、数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 卷会一直存在,直到没有容器使用 *数据卷的使用,类似于 Linux 下对目录或文件进行 mount。 1.1 创建一个数据卷 在用 docker run 命令的时候,使用 -v 标记来创建一个数据卷并挂载到容器里
本文向大家介绍详解iOS的数据存储,包括了详解iOS的数据存储的使用技巧和注意事项,需要的朋友参考一下 iOS应用数据存储的常用方式 1.XML属性列表(plist)归档. 2.Preference(偏好设置). 3.NSKeyedArchiver归档. 4.SQLite3 5.Core Data 应用沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件
在这方面有一些问题,需要一些帮助(指导)。我要备份的数据位于此处:/var/lib/docker/volumes/eb5294b586d6537c965bde61d02da06d49ff77467afdc55ec1441413fe5fb128/_data 因此,我需要创建此卷数据的备份,并将其传输到另一台主机。从本网站https://docs.docker.com/engine/tutorials