使用 Docker 容器备份与 Docker Compose 升级 GitLab 实例教程

在生产环境中运行 GitLab 时,备份与升级是保障安全与稳定的核心操作。下面我将结合官方文档与实践经验,整理出一份完整的教程。


🛠 前提条件

  • 已安装 Docker Engine 与 Docker Compose
  • GitLab 通过 Docker Compose 部署
  • 具备服务器的 root/sudo 权限
  • 熟悉基本的 Linux 命令行操作

📦 第一步:创建备份

在升级前,必须先备份数据与配置。

  • 完整备份

    bash 复制代码
    docker exec -t <container name> gitlab-backup create

    备份文件会写入:

    复制代码
    /var/opt/gitlab/backups
  • 数据库轻量备份(仅数据库,便于快速回滚)

    bash 复制代码
    docker exec -t <container name> gitlab-backup create SKIP=artifacts,repositories,registry,uploads,builds,pages,lfs,packages,terraform_state
  • secrets 文件备份

    • 容器内路径:/etc/gitlab/gitlab-secrets.json
    • 宿主机挂载路径:$GITLAB_HOME/config/gitlab-secrets.json
      该文件必须保存,否则恢复时会遇到密钥不一致问题。

📝 第二步:编辑 docker-compose.yml

docker-compose.yml 中更新 GitLab 镜像版本,例如:

yaml 复制代码
services:
  gitlab:
    image: gitlab/gitlab-ce:18.7.0-ce.0
    restart: always
    hostname: 'gitlab.example.com'
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - /srv/gitlab/config:/etc/gitlab
      - /srv/gitlab/logs:/var/log/gitlab
      - /srv/gitlab/data:/var/opt/gitlab

镜像版本可在 Docker Hub GitLab 镜像库 查询。


🔄 第三步:拉取并升级

执行以下命令:

bash 复制代码
docker compose pull
docker compose up -d

这会拉取最新镜像并重启容器,挂载卷中的数据与配置会被保留。


✅ 第四步:验证升级

  • 查看容器状态:

    bash 复制代码
    docker compose ps
  • 检查日志:

    bash 复制代码
    docker compose logs -f gitlab
  • 登录 GitLab Web 界面,确认版本已更新。


⚠️ 注意事项

  • 版本跨度大时,建议分阶段升级(例如 15.x → 16.x)。
  • 升级失败时,可利用备份进行回滚。
  • 建议在 测试环境先验证升级流程,再应用到生产环境。

🎯 总结

升级流程核心步骤:

  • 创建备份(数据库 + secrets)
  • 编辑 docker-compose.yml 更新镜像版本
  • 执行 docker compose pull/up 完成升级
  • 验证升级结果 确认服务正常
相关推荐
修罗王15 小时前
Linux Docker 服务管理与排查实战指南(新手速查版)
运维·docker
张龙68717 小时前
Docker 镜像瘦身实战:从 1.2GB 到 128MB,我踩过的 7 个坑和一套可复制的方法论
运维·后端·docker
杨浦老苏19 小时前
开源堡垒机 Warpgate:一个容器搞定 SSH、MySQL 和 Web 访问
运维·docker·ssh·堡垒机·群晖
ERD Online19 小时前
docker-compose 一键部署的 MIT 开源数据库建模平台
数据库·docker·开源
三言老师21 小时前
CentOS7.9 + Kubernetes 1.18.20 -清理所有 docker / containerd 残留
docker·容器·kubernetes
circuitsosk21 小时前
从Docker到Kubernetes:AI应用服务化与弹性伸缩的落地实践
人工智能·docker·kubernetes·ai应用部署
showyoui1 天前
K8s 集群迁移踩坑:Istio 升级后 nginx 403
网络·docker·kubernetes·istio·service_mesh
golang学习记2 天前
Go 项目使用docker compose的正确方式
开发语言·docker·golang
JLWcai202510092 天前
核电打磨 “安全卫士”|金利威不锈钢专用树脂砂轮,合规高效双在线
mysql·mongodb·eureka·sqlite·rabbitmq·nosql·memcached
雨声不在2 天前
私有 Docker Registry 排障实录:两个隐蔽的坑
docker·容器