首页主机资讯Linux Docker数据怎么持久化

Linux Docker数据怎么持久化

时间2025-11-26 22:45:03发布访客分类主机资讯浏览335
导读:Linux Docker 数据持久化实践指南 一、核心方案与差异 Volumes(数据卷):由 Docker 管理,默认位于宿主机的 /var/lib/docker/volumes/,适合生产环境;支持多容器共享、可配合远程/云存储驱动,...

Linux Docker 数据持久化实践指南

一、核心方案与差异

  • Volumes(数据卷):由 Docker 管理,默认位于宿主机的 /var/lib/docker/volumes/,适合生产环境;支持多容器共享、可配合远程/云存储驱动,删除容器后数据仍保留,需显式清理。
  • Bind Mounts(宿主机目录挂载):将宿主机的任意目录/文件挂载到容器,开发与运维常用;性能通常更好,但耦合宿主机目录结构,非 Docker 进程也能改动数据。
  • tmpfs Mounts(仅 Linux):数据仅存于宿主机内存,生命周期随容器,适合临时/敏感信息,非持久化。
  • 挂载语法:传统 -v/–volume 与键值式 –mount(自 Docker 17.06 起推荐,语义更清晰);在 Docker Swarm/服务场景仅支持 –mount

二、常用操作速查

  • 数据卷常用命令
    • 创建:docker volume create myvol
    • 列出:docker volume ls
    • 查看:docker volume inspect myvol(可见 Mountpoint 如 /var/lib/docker/volumes/myvol/_data
    • 删除:docker volume rm myvol;清理未使用:docker volume prune
  • 启动容器挂载示例
    • 命名卷:
      • -v:docker run -d --name app -v myvol:/data myimage
      • –mount:docker run -d --name app --mount source=myvol,target=/data myimage
    • 宿主机目录:
      • -v:docker run -d --name app -v /opt/data:/data:ro myimage(ro 为只读)
      • –mount:docker run -d --name app --mount type=bind,source=/opt/data,target=/data,readonly myimage
    • 只读与权限:在 -v 形式中追加 :ro,在 –mount 中使用 readonly 键。

三、典型场景与命令示例

  • MySQL 数据持久化(命名卷)
    • 启动:docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 -v mysql-data:/var/lib/mysql mysql:5.7
    • 验证:docker volume inspect mysql-data(Mountpoint 即宿主机实际路径)
  • Nginx 静态文件(宿主机目录)
    • 启动:docker run -d --name nginx -p 80:80 -v /opt/nginx/html:/usr/share/nginx/html:ro nginx
  • 多容器共享同一卷(volumes-from)
    • 共享卷:docker run -d --name logger -v shared-log:/log busybox tail -f /dev/null
    • 复用卷:docker run -it --name reader --volumes-from logger busybox ls /log
  • 远程共享存储(NFS 示例)
    • 宿主机准备 NFS 导出目录(如 /data),在 Docker 主机安装 NFS 客户端后,可直接用卷方式挂载 NFS 路径(需相应权限与网络配置)。

四、备份恢复与迁移

  • 卷备份(不停止应用)
    • 思路:启动临时容器,把目标卷挂载到临时容器,再用 tar 将卷内容打包到宿主机目录。
    • 示例:docker run --rm --volumes-from mysql -v $(pwd):/backup busybox tar cvf /backup/mysql-backup.tar /var/lib/mysql
  • 卷恢复
    • 思路:将备份 tar 包挂载到临时容器,解压到目标卷。
    • 示例:docker run --rm --volumes-from mysql -v $(pwd):/backup busybox tar xvf /backup/mysql-backup.tar -C /
  • 补充:也可直接对卷对应的宿主机目录(如 /var/lib/docker/volumes/< 卷名> /_data)做 rsync/cp 等备份,并配合 Cron 做定时任务。

五、选型与注意事项

  • 选型建议:生产优先 Volumes(可移植、易备份、可共享);开发调试常用 Bind Mounts(代码热更新、配置直连);敏感/临时数据用 tmpfs
  • 覆盖规则:将空卷挂载到容器已有目录时,会把目录内容拷贝进卷;将非空卷/非空目录挂载到容器目录时,原内容会被遮蔽,卸载后恢复。
  • 服务与 Swarm:创建 service 时仅支持 –mount;使用本地 volume 驱动时,每个服务容器拥有各自本地卷,如需跨容器/跨主机共享,请使用支持共享的卷驱动或外部存储(如 NFS/云盘插件)。
  • 权限与安全:Bind Mount 让宿主机与容器强耦合,注意目录权限与 SELinux/AppArmor;卷由 Docker 管理,非 Docker 进程不应直接改动其内容。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux Docker数据怎么持久化
本文地址: https://pptw.com/jishu/757195.html
Docker在Linux如何启动停止 filezilla ubuntu版本怎么选

游客 回复需填写必要信息