Docker备份和迁移数据

Docker备份和迁移数据
墨颜丶迁移方式介绍
容器中的数据,如果没有用挂载目录,删除容器后就会丢失数据。
前面我们已经讲解了如何 挂载目录
如果你是用bind mount
直接把宿主机的目录挂进去容器,那迁移数据很方便,直接复制目录就好了
如果你是用volume
方式挂载的,由于数据是由容器创建和管理的,需要用特殊的方式把数据弄出来。
备份和导入 Volume 的流程
备份:
- 运行一个 ubuntu 的容器,挂载需要备份的 volume 到容器,并且挂载宿主机目录到容器里的备份目录。
- 运行 tar 命令把数据压缩为一个文件
- 把备份文件复制到需要导入的机器
导入:
- 运行 ubuntu 容器,挂载容器的 volume,并且挂载宿主机备份文件所在目录到容器里
- 运行 tar 命令解压备份文件到指定目录
备份 MongoDB 数据演示
- 运行一个 mongodb,创建一个名叫
mongo-data
的 volume 指向容器的 /data 目录docker run -p 27018:27017 --name mongo -v mongo-data:/data -d mongo:4.4
- 运行一个 Ubuntu 的容器,挂载
mongo
容器的所有 volume,映射宿主机的 backup 目录到容器里面的 /backup 目录,然后运行 tar 命令把数据压缩打包docker run --rm --volumes-from mongo -v d:/backup:/backup ubuntu tar cvf /backup/backup.tar /data/
最后你就可以拿着这个 backup.tar 文件去其他地方导入了。
恢复 Volume 数据演示
- 运行一个 ubuntu 容器,挂载 mongo 容器的所有 volumes,然后读取 /backup 目录中的备份文件,解压到 /data/ 目录
docker run --rm --volumes-from mongo -v d:/backup:/backup ubuntu bash -c "cd /data/ && tar xvf /backup/backup.tar --strip 1"
注意,volumes-from 指定的是容器名字
strip 1 表示解压时去掉前面1层目录,因为压缩时包含了绝对路径
镜像备份
1 | 查看需要备份的镜像 |
镜像备份脚本
docker 批量全部镜像备份脚本
1 | !/bin/bash |
镜像导入
1 | docker load -i xxx.tar |
容器导出
1 | docker export <容器ID或名称> > /path/to/container_export.tar |
容器导入
1 | cat /path/to/container_export.tar | docker import - <新镜像名称>:<标签> |
注意
上述内容分为数据卷备份与导入
、镜像备份与导入
、容器备份与导入
不可混为一谈,根据自己需求。
只备份容器然后导入其他Docker是否会携带镜像
当你只备份容器并尝试在另一台Docker环境中导入时,需要注意的是,导入的容器并不包含其原始镜像。容器是基于镜像创建的,但导出的容器文件(使用docker export
命令)仅包含容器的文件系统快照,而不包含镜像的层次结构和元数据。因此,在导入容器时,Docker会将其视为一个新的镜像,但这个新镜像并不包含原始镜像的所有层和依赖关系。
如果你希望在另一台Docker环境中运行相同的容器,并且希望保留其原始镜像的所有层和依赖关系,那么你应该备份并迁移镜像(使用docker save
和docker load
命令),而不是仅备份容器。
备份容器、备份镜像与备份数据卷的区别
- 备份容器:
- 使用
docker export
命令导出容器的文件系统快照。 - 备份的文件不包含镜像的层次结构和元数据,仅包含容器的当前状态。
- 导入容器时,会创建一个新的镜像,但这个新镜像与原始镜像不同。
- 使用
- 备份镜像:
- 使用
docker save
命令保存镜像的所有层和元数据。 - 备份的文件包含镜像的完整结构和依赖关系。
- 导入镜像时,会恢复原始镜像的所有层和依赖关系。
- 使用
- 备份数据卷:
- 数据卷是Docker中用于持久化数据的特殊目录或文件。
- 使用
docker cp
命令或其他文件传输工具备份数据卷的内容。 - 备份的数据卷内容可以在新环境中重新创建数据卷并复制回去。
总结
- 备份容器适用于需要迁移容器的当前状态但不关心其原始镜像的场景。
- 备份镜像适用于需要迁移容器的完整环境和依赖关系的场景。
- 备份数据卷适用于需要持久化容器产生的数据并确保数据安全的场景。
在进行Docker迁移和备份操作时,请根据实际需求选择合适的备份方式,并确保在迁移前后验证备份文件的完整性和可用性。
简单粗暴
上边讲了很多很多,太过于复杂,下面来个简单粗暴的迁移
导出
1 | # 1. 压缩容器数据挂载目录 数据库挂载目录同样 |
导入
1 | # 1. 导入备份的镜像文件 |
文笔流畅美,点赞纷至来;
内容引入胜,分享乐开怀;
佳作值得赏,打赏表心怀。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果