docker容器数据存储之 volume 详解

docker容器数据持久化——volume 详解

阅读本文前,希望你已经对docker容器数据持久化相关问题及解决方案,有初步的了解,具体可以参考以下文章:

了解其他几种容器数据存储方案具体可以参考以下文章:

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

  • Volumes
  • Bind mounts
  • tmpfs mounts

无论你选择哪种mount类型,从container内部看没有区别,它们都是目录或者文件。数据都是寄存在宿主机上,只不过具体位置有所区别,如下图:

 

volume:volume由docker管理,比如创建、删除什么的。默认情况下,volume的存储空间来自于宿主机文件系统中的某个目录,如/var/lib/docker/volumes/,docker系统这外的程序不应该修改其中的数据。volume是官方推荐的持久化方案。

命令解析 -v(--volume)

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

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

1、镜像run的使用 加上参数配置
2、 commit提交副本镜像,重新启动新镜像加上参数配置(针对容器已经有数据的情况下)

创建和管理卷

与绑定安装不同,您可以在任何容器范围之外创建和管理卷。

 docker volume create my-vol #创建数据卷
 docker volume ls #查看有哪些卷
 docker volume inspect my-vol #查看卷详情 
 docker rm -f web #强制删除运行中的容器
 docker volume rm my-vol #删除卷
 docker volume prune #清理无用的卷
 docker ps -s #可以查看容器的大小是没有增加的

创建一个卷(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)到容器目录

如果您使用尚不存在的卷启动容器,则Docker将为您创建该卷。

-v或--volume

由三个字段组成,以冒号(:)分隔。这些字段必须以正确的顺序排列,并且每个字段的含义不是立即显而易见的。

$ docker run -d -v nginx-vol:/usr/share/nginx/html,readonly nginx:latest
  • 第一个字段是卷的名称,在给定的主机上是唯一的。对于匿名卷,将省略第一个字段。
  • 第二个字段是文件或目录在容器中的安装路径。
  • 第三个字段是可选的,如:只读数据卷,readonly 。具体参考官方文档。

查看容器是否挂载存储呢?

docker inspect eb5e31fef691

使用docker inspect 容器id 验证创建卷并安装正确。查找 Mounts 部分

"Mounts": [
    {
        "Type": "volume",
        "Name": "nginx-vol",
        "Source": "/var/lib/docker/volumes/nginx-vol/_data",
        "Destination": "/usr/share/nginx/html",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
],

 

Volume使用场景

请参考这篇文章:Docker容器数据持久化问题及解决方案

如果有兴趣了解更多详细资料,具体请查看官方文档:https://docs.docker.com/storage/volumes/

 


版权声明:本文为houhj168原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。