Docker-volume数据卷

发布于:2025-09-07 ⋅ 阅读:(18) ⋅ 点赞:(0)

在 linux 系统上,docker 将images, containers, volumes等相关的数据存储在/var/lib/docker下。

volume它的主要作用是容器和宿主机之间可以通信,方便备份恢复。

通过 Volume,可以将容器中的数据持久化到宿主机,确保数据不会因容器的删除而丢失。此外,还有bind mount(可以存储在主机系统的任何位置。它们甚至可能是重要的系统文件或目录。Docker 主机或 Docker 容器上的非 Docker 进程可以随时修改它们。)和tmpfs mount(挂载仅存储在主机系统的内存中,永远不会写入主机系统的文件系统)

概念 描述 区别
数据卷(Volume) 用于持久化容器数据的工具 数据卷可以跨容器共享,数据持久化到宿主机。
绑定挂载(Bind Mount) 将宿主机的文件或目录挂载到容器中 绑定挂载依赖于宿主机的文件系统,路径必须存在。
临时文件系统(tmpfs) 将数据存储在内存中 临时文件系统中的数据不会持久化,容器删除后数据丢失。

常用命令:

docker volume ls 查看有哪些数据卷

docker volume create 卷名 创建卷

docker volume inspect 卷名 查看卷的详细信息

docker volume rm 卷名 删除卷

docker启动容器时使用-v /--mount指定要挂载的卷:如果该卷不存在,docker 自动创建

挂载类型对比; --mount 就需要提前创建

参数形式 示例 特点
-v 短格式 -v myvol:/app/data 简洁,自动创建卷
–mount 长格式 –mount type=volume,source=myvol,target=/app/data 更精确的控制选项
推荐:生产环境优先使用 --mount,支持更多配置选项(如只读挂载)

两种挂载语法:

docker run -d \
  --name devtest \
  -v myvol2:/app \
  nginx:latest

docker run -d \
  --name devtest \
  --mount source=myvol2,target=/app \      # source宿主机  target容器
  nginx:latest
  • 挂载只读卷:

docker run -d \ --name=nginx-1 \ --mount source=nginx-vol,target=/usr/share/nginx/html,readonly \ nginx:latest

  • 挂载子目录:子目录卷需要提前在卷logs中创建好,不然会挂载失败

cd /var/lib/docker/volumes/logs/_data mkdir app1

docker run -d \ --name=nginx-2 \ --mount source=logs,target=/var/log/app1,volume-subpath=app1 \ # 语法要求:三个逗号之间不能有空格 nginx:latest

  • 在两台docker宿主机上创建支持nfs功能的卷 nfs-web-1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1、首先准备一台NFS服务器(详见NFS服务搭建过程)

搭建过程大致类似,只有一处需要注意 :

/docker/web/html 192.168.237.0/24(ro,sync,all_squash)

如果这里只给了它只读的权限,就要给这个/docker/web 777的权限

2、在两台docker上,一台Ubuntu,一台rocky 都安装客户端,这样才能识别挂载的文件

Ubuntu:apt install -y nfs-common

rocky:yum install nfs-utils -y

3、创建支持NFS功能的卷(两台docker上都操作一遍)

docker volume create \ --driver local \ --opt type=nfs \ --opt o=addr=192.168.237.179,nolock,soft,ro,sync \ --opt device=:/docker/web nfs-web-1

4、在两台宿主机上启动容器时使用该卷

docker run -d --name nginx-4 -p 5588:80 -v nfs-web-1:/usr/share/nginx/html nginx

5、访问验证

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

思考:

正常停止容器,容器里的数据会丢失吗?

如何将容器里的数据保存到宿主机?

如何在容器和宿主机之间传输数据? docker cp

修改了容器对应的配置文件如何让配置文件生效?


网站公告

今日签到

点亮在社区的每一天
去签到