Docker 镜像仓库备份与恢复怎么做

冷漠man

冷漠man

2026-08-04

465人浏览

原创

docker镜像仓库备份核心是保护镜像数据、元数据和配置三部分,需针对registry或harbor等类型定位存储路径,用rsync增量备份文件系统或对象存储,并同步备份配置文件与tls证书;恢复时须按场景替换目录、还原数据库并验证拉取功能。

docker 镜像仓库备份与恢复怎么做

Docker 镜像仓库(如官方 registry、Harbor 或自建 registry)的备份与恢复,核心是保护镜像数据 + 元数据 + 配置三部分。它和单个镜像的 docker save/load 不同——仓库是服务级存储,备份对象是整个存储后端(通常是文件系统或对象存储),不是一个个镜像文件。


一、确认仓库类型和存储路径

先弄清你用的是哪种仓库,因为备份方式差异很大:

  • 自建 Docker Registry(默认本地文件存储)
    查看配置文件(通常是 /etc/docker/registry/config.yml),找到 storage 段:

    storage:
      filesystem:
        rootdirectory: /var/lib/registry  # 这就是你要备份的目录

    运行 docker volume inspect registry-data 也能定位实际挂载点。

  • Harbor(推荐生产环境)
    数据分散在多个组件中:

    • 镜像层:默认存于 /data/harbor/registry(或挂载的 NFS/S3)
    • 数据库(PostgreSQL):存储项目、权限、日志等元数据
    • Redis:缓存信息(可丢,重启重建)
    • 配置文件:/harbor/harbor.yml 及证书目录
  • 云托管仓库(如 AWS ECR、阿里云 ACR)
    本身具备高可用和跨区域复制能力,无需手动备份镜像数据,但需备份:

    • IAM 权限策略
    • 镜像扫描规则、漏洞策略
    • Repository 策略(如自动清理规则)

二、备份关键内容(以自建 registry 为例)

✅ 必备三项

  • 镜像数据目录(如 /var/lib/registry
    包含所有镜像层、manifest、digest 校验信息。用 rsync 增量备份最稳:

    rsync -a --delete /var/lib/registry/ /backup/registry-full/

    -z(压缩传输)、--exclude="tmp/"(跳过临时文件)更稳妥。

    Docker Desktop
    Docker Desktop

    Docker Desktop 可用于构建容器化 PHP 开发环境,适合 Laravel、Symfony、WordPress 等项目统一运行依赖。

    下载
  • Registry 配置文件(如 /etc/docker/registry/config.yml
    记录认证方式、存储路径、HTTP 设置等,丢失则无法正确启动服务。

  • TLS 证书与密钥(如 /certs/domain.crt/certs/domain.key
    没有它们,HTTPS 就失效,客户端拉取会报 x509 certificate signed by unknown authority

⚠️ 可选但强烈建议

  • 数据库备份(Harbor 必做)
    pg_dump -U postgres -h localhost registry > /backup/harbor-db-$(date +%Y%m%d).sql
  • 定期校验备份完整性
    sha256sum /backup/registry-full/_data/v2/repositories/nginx/_manifests/revisions/sha256/* | head -n 3

三、恢复流程(按故障场景区分)

▪ 场景1:单节点 registry 完全宕机(磁盘损坏)

  1. 重装 registry 容器或服务
  2. 替换新 config.yml(确保 rootdirectory 路径一致)
  3. 把备份的 /var/lib/registry/ 整体还原到原路径
  4. 启动 registry,用 curl -X GET https://your-registry/v2/_catalog 测试是否返回镜像列表
  5. 任选一个镜像验证拉取:docker pull your-registry/nginx:latest

▪ 场景2:Harbor 整体崩溃

  1. 恢复 PostgreSQL 数据库(先清空旧库,再 psql -U postgres )
  2. 还原 /data/harbor/registry/ 目录(保持属主为 10000:10000
  3. 复制回 harbor.yml 和证书,运行 ./install.sh --with-notary --with-clair(按原选项重装)
  4. 登录 Harbor Web 页面,检查项目、镜像数量、扫描状态是否一致

▪ 场景3:误删某个仓库或镜像(非全库故障)

  • 如果启用了 垃圾回收(garbage collection),立即停服务,从备份中拷贝对应 repo 子目录回来(路径形如 /var/lib/registry/v2/repositories/myapp/),再执行 GC 清理残留引用。
  • 更安全的做法:不依赖 GC,日常启用 registry 的 delete API 并配鉴权,配合脚本记录每次删除操作,便于快速回滚。

四、自动化与避坑提醒

  • 不要只备份容器,要备份卷或宿主机路径
    docker commitdocker export 对 registry 容器无效——它只是运行时进程,数据不在容器内。

  • 避免在 registry 运行时直接 tar 打包
    可能导致 manifest 和 layer 文件状态不一致。建议:

    • 临时停服务 docker stop registry
    • 或用 rsync(它支持增量且对正在写入的文件更友好)
  • 测试恢复必须做
    每次备份后,在隔离环境跑一次完整恢复流程,验证能否成功 pull 镜像并 run 容器。

  • 备份保留周期建议

    • 全量备份:每周一次
    • 增量备份:每 4 小时一次(尤其高频推送场景)
    • 至少保留 3 份历史备份(防止某次备份损坏)

不复杂但容易忽略。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

docker docker 镜像

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

2023.07.24

422

4

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

2004

6

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

2508

6

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

1005

7

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

2026.02.11

138

16

Docker 容器部署
Docker 容器部署

本专题整合了Docker容器部署相关内容,阅读专题下面的文章了解更多详细操作教程。

2026.03.31

183

14

Java容器化部署与Docker实践教程合集
Java容器化部署与Docker实践教程合集

聚焦 Java 应用的容器化与云原生部署,讲解 Dockerfile 编写规范与 Java 应用镜像构建、多阶段构建(Multi-stage Build)减小镜像体积、Jib / Buildpacks 免 Dockerfile 镜像构建方案、JVM 容器感知参数(-XX:MaxRAMPercentage)配置、Docker Compose 编排多服务(应用 + MySQL + Redis)、容器健康检查与资源限制、Kubernetes

2026.05.11

237

26

Go Docker与容器化部署教程合集
Go Docker与容器化部署教程合集

聚焦 Go 应用的容器化部署优势与实践,讲解 Go 静态编译特性(CGO_ENABLED=0)与 scratch / distroless 极小基础镜像构建、多阶段 Dockerfile 编写规范、交叉编译生成目标平台二进制、镜像安全扫描(Trivy)与漏洞修复、Docker Compose 本地编排开发环境、Kubernetes Deployment / Service / ConfigMap 部署 Go 服务、健康检查(Livene

2026.05.15

183

24

Hyperf 项目部署运维与性能调优手册
Hyperf 项目部署运维与性能调优手册

聚焦 Hyperf 在生产环境的落地,包含 Docker 高效打包、Swoole 配置优化、常见的内存溢出(OOM)问题排查方法以及热更新方案。

2026.05.19

325

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Docker 官方文档
Docker 官方文档

共0课时 | 0人学习

宝塔 Docker 模块使用手册
宝塔 Docker 模块使用手册

共0课时 | 0人学习