Linux Docker数据怎么持久化
导读: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
