Volumes数据卷管理

149 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

哈喽,大家好!这篇文章会为大家介绍Volumes数据卷的优势和如何使用Volumes数据卷,希望使你们有所收获!

Volumes数据卷优势

虽然Docker数据外部挂载机制提供了三种数据管理方式,但在实际使用中,用到更多的是Volumes和Bind mounts这两种数据管理方式。这两种数据管理方式中,Volumes完全由Docker管理的,是官方相对推荐的数据管理方式;而Bind mounts则要依赖于主机的目录结构

与Bind mounts (绑定挂载)相比,Volumes (数据卷)有以下几个优势:

  • 数据卷比绑定挂载更容易备份和迁移
  • 可以使用Docker CLI指令或Docker API来管理数据卷
  • 在Linux和Windows容器上都可以使用数据卷
  • 在多个容器之间可以更安全的共享数据卷
  • 数据卷驱动器允许在远程主机或云提供商上存储数据卷,并且加密数据卷的内容或添加其他功能
  • 一个新数据卷的内容可以由一个容器预填充

此外,在容器的可写层中,数据卷通常是持久化数据更好的选择,因为使用数据卷并不会增加使用容器的大小,而且数据卷的内容存在于给定容器的生命周期之外。如果我们的容器生成了非持久性状态的数据,那么可以考虑使用tmpfs mounts(tmpfs挂载),因为它可以避免永久存储数据,以及写入容器的可写层时增加容器的负担。

Volumes数据卷使用

创建并管理数据卷

创建数据卷

docker volume create my-vol         # 创建一个名为my-vol数据卷

查看数据卷

docker volume ls
docker ps -a

核查数据卷

docker volume inspect my-vol        # 查看指定数据卷详情

删除数据卷

docker volume rm my-vol

启动容器并加载数据卷

查看本机容器和数据卷

202209171311895.png

查看本机Docker文件系统中的容器和数据卷

/var/lib/docker/        # Docker默认在本机上的文件系统目录

202209171314614.png 本地Docker文件系统中包含了两个重要的文件目录,分别是containers和volumes,这两个文件目录是用于存放用户创建的容器和数据卷的

启动容器并挂载数据卷

使用docker run指令创建并启动一个容器,同时挂载一个数据卷,具体指令如下:

docker run -d -it --name devtest1 --mount source=myvol,target=/app busybox:latest

也可以使用 -v 参数挂载数据卷,具体指令如下:

docker run -d -it --name devtest2 -v myvol:/app busybox:latest
  • --mount:由多个key=value形式的键值对组成,键值对之间由英文逗号分隔。键值说明:

    • type(挂载的类型):可以是bind、volume或tmpfs。当前使用的是数据卷,即volume
    • source(挂载源):对于命名的数据卷来说,这就是数据卷的名称,而对于匿名卷来说,该字段被省略,该字段可以用source或src表示
    • destination(挂载点):就是将文件或目录挂载到容器中的具体路径,该字段可以用destination、dst或target表示
    • readonly:如果出现了该参数,则挂载到容器中的数据就表示是只读了
  • -v(--volume的缩写):由三个字段组成,之间由冒号分隔,字段必须以正确的顺序排列,而且每个字段的含义都特别明确。属性值说明:

    • 在命名卷的情况下,第一个字段是数据卷的名称,在给定的主机上是唯一的;对于匿名卷,将会省略第一个字段
    • 第二个字段是在容器中挂在数据的文件或目录的路径
    • 第三字段是可选的,是一个逗号分隔的参数列表,如ro(readonly,即只读)

需要注意的是,不管是哪种方式挂载数据卷,前面第一个参数都是设置的数据卷名称。执行完指令后会自动在Docker文件系统的数据卷目录/var/lib/docker/volumes下创建一个myvol子目录来保存数据。如果是使用Bind mounts(绑定挂载)进行的数据管理,那么第一个参数就是宿主机保存数据的具体地址(如 -v /src/myvolume/data:/app)

再次查看本机容器和数据卷列表

202209171410139.png 容器创建成功后自动加载了数据卷,如果在创建容器时数据卷不存在,则Docker会自动创建

检查容器详情

使用docker inspect指令查看容器数据挂载信息:

202209171422629.png

再次查看本机Docker文件系统中的容器和数据卷

202209171425617.png 可以看到新建的容器和数据卷都以自动生成在本地Docker文件目录中。如果将两个容器都删除,则文件目录中的容器也会自动删除,但数据卷可以保留,除非另外主动删除数据卷

数据卷的合理使用可以使我们对Docker的数据操作更加方便,当操作不当也会对数据造成不可逆的损坏,所以在对数据进行操作时,建议慎重!