Bootstrap

Windows的docker中安装gitlab

一.Windows的docker中安装gitlab

1.通过阿里云拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/lab99/gitlab-ce-zh

2.在本地创建备份数据的目录

mkdir -p D:home/software/gitlab/etc
mkdir -p D:home/software/gitlab/logs
mkdir -p D:home/software/gitlab/data

3.执行docker配置与启动

docker run --detach --publish 8443:443 --publish 8090:80  --publish 8022:22  --name gitlab   --restart always --hostname 192.168.1.108  -v D:\home/software/gitlab/etc:/etc/gitlab -v D:\home/software/gitlab/logs:/var/log/gitlab  -v D:\home/software/gitlab/data:/var/opt/gitlab -v /etc/localtime:/etc/localtime:ro --privileged=true registry.cn-hangzhou.aliyuncs.com/lab99/gitlab-ce-zh

以上命令注释

# 使用 docker run 命令启动一个 Docker 容器
docker run 
# 以分离(后台)模式运行容器,容器将在后台运行而不会占用当前终端
--detach 
# 将容器内的 443 端口映射到主机的 8443 端口,可用于访问容器内服务的 HTTPS 服务
--publish 8443:443 
# 将容器内的 80 端口映射到主机的 8090 端口,可用于访问容器内服务的 HTTP 服务
--publish 8090:80 
# 将容器内的 22 端口映射到主机的 8022 端口,可用于通过 SSH 访问容器
--publish 8022:22 
# 为容器指定名称为 gitlab,方便后续对容器进行管理和操作
--name gitlab 
# 当 Docker 守护进程启动时,自动重启该容器,确保容器的高可用性
--restart always 
# 为容器指定主机名,这里是 192.168.1.108
--hostname 192.168.1.108 
# 将主机的 D:\home/software/gitlab/etc 目录挂载到容器内的 /etc/gitlab 目录,用于存储 GitLab 的配置文件
-v D:\home/software/gitlab/etc:/etc/gitlab 
# 将主机的 D:\home/software/gitlab/logs 目录挂载到容器内的 /var/log/gitlab 目录,用于存储 GitLab 的日志文件
-v D:\home/software/gitlab/logs:/var/log/gitlab 
# 将主机的 D:\home/software/gitlab/data 目录挂载到容器内的 /var/opt/gitlab 目录,用于存储 GitLab 的数据文件
-v D:\home/software/gitlab/data:/var/opt/gitlab 
# 将主机的 /etc/localtime 目录挂载到容器内的 /etc/localtime 目录,并设置为只读,使容器内的时间与主机时间同步
-v /etc/localtime:/etc/localtime:ro 
# 赋予容器特权,容器内的进程将拥有一些额外的权限,但可能会带来安全风险,需谨慎使用
--privileged=true 
# 指定要使用的 Docker 镜像,这里使用的是 registry.cn-hangzhou.aliyuncs.com/lab99/gitlab-ce-zh 镜像
registry.cn-hangzhou.aliyuncs.com/lab99/gitlab-ce-zh 

4.在同一局域网内网页中执行如下网址即可登录gitlab客户端

192.168.1.108:8090

二.手动备份gitlab数据方法 

1.gitlab中的源码备份非常重要;

2.对 gitlab 进行备份是创建一个包含所有库和附件的归档文件;

3.对备份的恢复只能恢复到与备份时的 gitlab 相同的版本;

4.将 gitlab 迁移到另一台服务器上的最佳方法就是通过备份和还原。

1.使用docker exec命令进入 GitLab 容器

docker exec -it <gitlab_container_name> /bin/bash

 2.在 GitLab 容器内,执行备份命令

gitlab-rake gitlab:backup:create

3.在宿主机内,执行备份命令

docker exec -it <gitlab_container_name> gitlab-rake gitlab:backup:create

4.备份文件将存储在容器内的/var/opt/gitlab/backups目录中,文件名类似于<timestamp>_gitlab_backup.tar,其中<timestamp>是当前的时间戳。

 ​

三.恢复备份

1.删除一个gitlab项目(测试用)

2.停止gitlab,执行如下命令

root@172:/# gitlab-ctl stop unicorn
ok: down: unicorn: 0s, normally up
root@172:/# gitlab-ctl stop sidekiq
ok: down: sidekiq: 1s, normally up
root@172:/#

3.确认是否停止,执行如下命令(最后两行的down即说明已停止)

root@172:/# gitlab-ctl status
run: gitlab-workhorse: (pid 246) 27978s; run: log: (pid 239) 27978s
run: logrotate: (pid 18723) 2779s; run: log: (pid 242) 27978s
run: nginx: (pid 248) 27978s; run: log: (pid 241) 27978s
run: postgresql: (pid 251) 27978s; run: log: (pid 244) 27978s
run: redis: (pid 252) 27978s; run: log: (pid 245) 27978s
down: sidekiq: 166s, normally up; run: log: (pid 243) 27978s
down: unicorn: 180s, normally up; run: log: (pid 240) 27978s
root@172:/#

4.接下来执行 gitlab 恢复操作,文件名只要数字部分就可以了

gitlab-rake gitlab:backup:restore BACKUP=备份文件名

root@172:/# gitlab-rake gitlab:backup:restore BACKUP=1737450440_gitlab_backup
The specified backup doesn't exist!
root@172:/#

 5.重新启动gitlab

root@172:/# gitlab-ctl restart
ok: run: gitlab-workhorse: (pid 52065) 0s
ok: run: logrotate: (pid 52073) 1s
ok: run: nginx: (pid 52079) 0s
ok: run: postgresql: (pid 52101) 1s
ok: run: redis: (pid 52109) 0s
ok: run: sidekiq: (pid 52113) 0s
ok: run: unicorn: (pid 52118) 1s
root@172:/#

6.确认是否启动

root@172:/# gitlab-ctl status
run: gitlab-workhorse: (pid 52065) 61s; run: log: (pid 239) 28709s
run: logrotate: (pid 52073) 61s; run: log: (pid 242) 28709s
run: nginx: (pid 52079) 60s; run: log: (pid 241) 28709s
run: postgresql: (pid 52101) 60s; run: log: (pid 244) 28709s
run: redis: (pid 52109) 59s; run: log: (pid 245) 28709s
run: sidekiq: (pid 52113) 59s; run: log: (pid 243) 28709s
run: unicorn: (pid 52118) 59s; run: log: (pid 240) 28709s
root@172:/#

7. 恢复完成

四.自动备份gitlab数据方法

1.在宿主机内,创建批处理文件, gitlab_backup_sunday.bat

@echo off
setlocal

REM 设置 Gitlab 容器名称
set GITLAB_CONTAINER_NAME=<gitlab_container_name>

REM 设置备份日志文件路径
set LOG_FILE=D:\home\software\gitlab\data\backups\backup_log.txt

REM 开始备份操作
echo Starting Gitlab backup at %DATE% %TIME% >> %LOG_FILE%

REM 以下是核心备份命令
docker exec -it %GITLAB_CONTAINER_NAME% gitlab-rake gitlab:backup:create

REM 结束备份操作
echo Backup completed at %DATE% %TIME% >> %LOG_FILE%

endlocal

2.使用方法

  1. 将上述代码保存为一个 .bat 文件,例如 gitlab_backup_sunday.bat
  2. 打开 Windows 的 “任务计划程序”:
    • 搜索并打开 “任务计划程序”。
    • 在 “任务计划程序” 中,点击 “创建任务”。
    • 在 “常规” 选项卡中,输入任务的名称,如 “Gitlab 周日备份任务”,并选择一个具有足够权限的用户账户(通常是管理员账户)。
    • 在 “触发器” 选项卡中,点击 “新建”,设置触发器的详细信息:
      • 开始任务设置为 “按预定计划”。
      • 选择 “每周”,在 “周日” 上打勾,将开始时间设置为 02:00:00。
    • 在 “操作” 选项卡中,点击 “新建”,选择 “启动程序”,并浏览找到你保存的 gitlab_backup_sunday.bat 脚本

 

 

 

五.手动本地备份gitlab镜像 

在 Windows 上使用 Docker 时,每个 Docker 镜像实际上存储在 Docker 的存储系统中,其具体位置取决于 Docker 的安装和配置,但通常情况下,你不需要直接操作该位置,因为 Docker 会自动管理镜像的存储和使用。以下是一些有关 Docker 镜像在 Windows 上存储的详细信息:

1、Docker 存储位置的一般情况
Docker 在 Windows 上使用 Windows 容器时,镜像存储在 Windows 的文件系统中,但位置通常隐藏在 Docker 的内部存储结构中。
对于 Docker Desktop,它使用一个名为 vhdx 的虚拟硬盘文件(Hyper-V 技术)来存储镜像、容器和其他 Docker 相关数据。这个文件通常位于 C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx。
2、查看 Docker 镜像信息
你可以使用 Docker 命令行工具来查看和管理镜像信息,而无需直接访问存储位置。例如:
查看所有本地 Docker 镜像:docker images
这个命令将列出所有已下载到本地的 Docker 镜像,包括镜像的仓库名、标签、镜像 ID、创建时间和大小等信息。
3、存储位置的限制和注意事项
直接操作 Docker 的存储位置可能会导致 Docker 出现不可预测的问题,如数据损坏或丢失,因为 Docker 期望它的存储结构保持完整。
如果你需要备份或迁移 Docker 镜像,可以使用 Docker 提供的命令和工具,而不是直接操作存储位置。

1.保存一个镜像为一个 .tar 文件

docker save -o <output_file.tar> <image_name:tag>

 这个命令会将指定的镜像保存为一个 .tar 文件,你可以将其存储在 Windows 的任何位置。

2.加载一个已保存的镜像

docker load -i <input_file.tar>

这个命令可以将之前保存的 .tar 文件加载回 Docker 环境。

;