使用Docker容器备份GitLab完整过程
GitLab是常用的代码托管与DevOps平台,使用Docker部署GitLab时,定期备份数据可以避免数据丢失风险。本文详细介绍在Docker容器中备份GitLab的完整流程,包含备份操作、备份文件管理、恢复验证三个核心环节。
一、备份前准备
在执行备份操作前,需要确认以下前提条件:
已成功部署运行Docker版GitLab,容器状态为运行中
宿主机有足够磁盘空间存放备份文件,建议预留至少GitLab数据总量2倍的空间
拥有Docker宿主机的root或sudo权限,可操作容器与宿主机文件
确认GitLab容器内已安装gitlab-backup工具,官方镜像默认内置该工具
二、执行GitLab备份操作
Docker容器的GitLab备份需要通过容器内部命令执行,步骤如下:
1. 查看运行中的GitLab容器名称
首先在宿主机执行以下命令,获取GitLab容器的名称或ID:
docker ps | grep gitlab
执行后会输出类似如下结果,记录容器的NAMES字段,例如gitlab-container:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a1b2c3d4e5f6 gitlab/gitlab-ce:latest "/init" 7 days ago Up 7 days 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:22->22/tcp gitlab-container
2. 进入GitLab容器执行备份命令
使用docker exec命令进入容器,执行备份指令:
docker exec -it gitlab-container gitlab-backup create
命令执行后,GitLab会自动备份数据库、仓库数据、配置文件、上传附件等所有核心数据,过程中会输出备份进度,等待执行完成即可。如果希望备份过程在后台运行,可添加SKIP=参数排除不需要备份的内容,例如跳过CI作业日志:
docker exec gitlab-container gitlab-backup create SKIP=ci_job_logs
3. 确认备份文件生成
备份完成后,默认备份文件会存放在GitLab容器内的>/var/opt/gitlab/backups目录下,文件命名格式为时间戳_gitlab_backup.tar。可以通过如下命令查看容器内备份文件:
docker exec gitlab-container ls -lh /var/opt/gitlab/backups
三、备份文件导出到宿主机
容器内的备份文件会随容器删除丢失,因此需要将其复制到宿主机持久化存储:
1. 创建宿主机备份目录
在宿主机创建专门存放GitLab备份的目录,例如:
mkdir -p /data/gitlab/backups
2. 复制备份文件到宿主机
使用docker cp命令将容器内的备份文件复制到宿主机目录:
docker cp gitlab-container:/var/opt/gitlab/backups/ /data/gitlab/backups/
复制完成后,在宿主机执行ls -lh /data/gitlab/backups/backups即可看到导出的备份文件。
3. 备份GitLab配置文件
除了数据备份,还需要备份GitLab的配置文件,配置文件存放在宿主机的挂载目录或容器内/etc/gitlab目录,若部署时未挂载配置文件目录,可通过如下命令导出:
docker cp gitlab-container:/etc/gitlab /data/gitlab/backups/gitlab-config
四、备份文件管理与定期备份
1. 备份文件清理
GitLab不会自动清理旧备份文件,需要手动或通过脚本定期清理过期备份,例如保留最近7天的备份:
find /data/gitlab/backups/backups -name "*.tar" -mtime +7 -delete
2. 配置定期自动备份
可以通过宿主机的crontab配置定时备份任务,编辑crontab配置:
crontab -e
添加如下内容,设置每天凌晨2点执行备份并导出到宿主机:
0 2 * * * docker exec gitlab-container gitlab-backup create && docker cp gitlab-container:/var/opt/gitlab/backups/ /data/gitlab/backups/ && find /data/gitlab/backups/backups -name "*.tar" -mtime +7 -delete
五、备份恢复验证
备份完成后建议进行恢复验证,确保备份文件可用:
准备一个全新的GitLab容器,版本需与备份时的GitLab版本一致
将宿主机的备份文件复制到新容器的
/var/opt/gitlab/backups目录进入新容器,执行恢复命令:
gitlab-backup restore BACKUP=备份文件时间戳恢复完成后重启GitLab服务:
gitlab-ctl reconfigure && gitlab-ctl restart访问新GitLab服务,验证仓库、用户、配置等数据是否完整
注意:恢复操作会覆盖当前GitLab的所有数据,验证时请使用全新的测试容器,避免影响生产环境数据。
常见问题说明
备份失败提示权限不足:检查执行docker命令的用户是否有对应权限,或切换为root用户执行
备份文件过大:可以在备份时通过
SKIP=参数排除不需要的内容,例如SKIP=artifacts,lfs跳过制品与LFS文件恢复后无法访问:检查GitLab版本是否匹配,配置文件是否正确恢复,服务是否正常启动