Docker 数据卷(volumes)介绍
HDUZN

Docker 提供了三种不同的方式将数据从 Docker Host 挂载到 Docker 容器,并实现数据的读取和存储:volumes、bind mounts、tmpfs 。

  • Volumes 存储在 Docker Host 文件系统的一个路径下,这个路径是由 Docker 来进行管理,路径默认是 /var/lib/docker/volumes/,非 Docker 的进程不能去修改这个路径下面的文件,所以说Volumes 是持久存储数据最好的一种方式。
  • Bind mounts 可以存储在 Docker Host 文件系统的任何位置,它们甚至可能是重要的系统文件或目录,非 Docker 的进程或者 Docker 容器可能随时对其进行修改,存在潜在的安全风险。
  • Tmpfs 只存储在 Docker Host 的系统内存中,不会写入到系统的文件系统中,不会持久存储。

数据卷(volumes)是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷 可以在容器之间共享和重用;
  • 对 数据卷 的修改会立马生效;
  • 对 数据卷 的更新,不会影响镜像;
  • 数据卷 默认会一直存在,即使容器被删除。

注意:数据卷 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会复制到数据卷中(仅数据卷为空时会复制)。

数据卷

1.创建一个数据卷

创建一个数据卷:my-vol

1
docker volume create my-vol

查看所有的数据卷:

1
docker volume ls

查看指定 数据卷(my-vol) 的信息:

1
docker volume inspect my-vol

2.删除数据卷

1
docker volume rm my-vol

数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除 数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 数据卷。

如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个命令。

无主的数据卷可能会占据很多空间,要清理使用以下命令:

1
docker volume prune

挂载数据卷

启动容器的时候,可以先创建好数据卷,也可以直接设置(会创建新的数据卷)。

用法

  • -v--volume数据卷名称:容器中路径
  • --mount,由多个键值对组成,以逗号分隔,每个键=组由一个元组组成。--mount语法比-v--volume更详细

1.docker run使用数据卷

在用 docker run 命令的时候,一般使用-v--mount 标记来将 数据卷 挂载到容器里。在一次 docker run 中可以挂载多个 数据卷。

例如:创建一个名为 myweb 的容器,并加载一个 数据卷 到容器的 /usr/share/nginx/html 目录。

1
2
3
4
5
$ docker run -d -P \
--name myweb \
# -v my-vol:/usr/share/nginx/html \
--mount source=my-vol,target=/usr/share/nginx/html \
nginx:alpine

查看容器中数据卷信息:

1
docker inspect myweb

以上命令可以查看 myweb 容器的信息,数据卷 信息在 “Mounts”下面。

2.docker-compose使用数据卷

例如:数据卷mysql_data所挂载的是容器中的/var/lib/mysql目录。

1
2
3
4
5
6
7
8
9
10
version: "3"

services:
my_src:
image: mysql:8.0
volumes:
- mysql_data:/var/lib/mysql

volumes:
mysql_data:

数据卷相关介绍 参考文章:

  • 本文标题:Docker 数据卷(volumes)介绍
  • 本文作者:HDUZN
  • 创建时间:2022-06-19 11:36:52
  • 本文链接:http://hduzn.cn/2022/06/19/Docker数据卷/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论