打包容器有两种方式

打包容器有两种方式,取决于你的需求:


方式一:打包容器为镜像(保留运行状态 + 数据)

bash 复制代码
# 1. 停止容器(可选,但建议)
docker stop 3b82aa60bbb4

# 2. 提交为镜像
docker commit 3b82aa60bbb4 my-postgres-backup:v1.0

# 3. 保存为 tar 文件
docker save -o /backup/my-postgres-backup-v1.0.tar my-postgres-backup:v1.0

# 4. 压缩(可选,节省空间)
gzip /backup/my-postgres-backup-v1.0.tar

目标机器还原:

bash 复制代码
# 传输后加载
gunzip /backup/my-postgres-backup-v1.0.tar.gz
docker load -i /backup/my-postgres-backup-v1.0.tar

# 运行(数据已内置)
docker run -d --name postgres-new -p 5432:5432 my-postgres-backup:v1.0

⚠️ 注意 :这种方式把数据打包进镜像层,镜像会很大,且后续数据变更不会持久化到宿主机。


方式二:只打包容器配置(推荐配合数据分离)

bash 复制代码
# 导出容器配置(JSON 格式,包含环境变量、挂载等)
docker inspect 3b82aa60bbb4 > /backup/postgres-container-config.json

# 配合数据目录打包
tar czf /backup/postgres-full_$(date +%Y%m%d_%H%M%S).tar.gz \
  -C /backup postgres-container-config.json \
  -C /opt/git-resources/AFFiNE/data/self-host/postgres pgdata

目标机器还原:

bash 复制代码
# 1. 解压数据
tar xzf /backup/postgres-full_xxx.tar.gz -C /

# 2. 根据 JSON 配置重新创建容器
docker run -d \
  --name postgres-new \
  -e POSTGRES_PASSWORD=your_password \
  -e POSTGRES_USER=postgres \
  -v /opt/git-resources/AFFiNE/data/self-host/postgres/pgdata:/var/lib/postgresql/data \
  -p 5432:5432 \
  postgres:16

方式对比

方式 包含内容 镜像大小 适用场景
docker commit + save 容器文件系统快照 大(含数据) 快速迁移、测试环境克隆
docker inspect + 数据分离 仅配置 + 独立数据包 生产环境、长期维护
相关推荐
Alsn862 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
程序员老赵3 天前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
杨浦老苏3 天前
轻量级Docker仪表板Servedash
运维·docker·监控·群晖·仪表板
正经教主3 天前
【docker基础】 第八周:容器监控与应用更新策略
运维·docker·容器
kiros_wang3 天前
Docker 使用完整指南
运维·docker·容器
正经教主3 天前
【docker基础】第九周:Docker安全与镜像优化
运维·docker·容器
CodeStats3 天前
【虚拟机】 从 CPU 指令到虚拟机隔离:虚拟机就是一个“模拟了完整硬件的普通进程”
java·docker
ai产品老杨3 天前
突破安防碎片化:基于 Docker 与边缘计算的 AI 视频智能化中台,如何通过 GB28181/RTSP 统一接入与全套源码交付实现二次开发自由?
人工智能·docker·边缘计算
正经教主3 天前
【docker基础】第十三周:学习总结与进阶方向【完结】
运维·docker·容器
“码”力全开3 天前
解耦异构设备:基于 Docker 与边缘计算的 GB28181/RTSP 统一流媒体平台架构演进(全源码交付)
docker·架构·边缘计算