你需要实现 Docker 环境下 GitLab 的离线部署,核心思路是先在有网络环境准备镜像和必要文件,再拷贝到离线机器进行部署,以下是分步详细操作:
一、有网络机器:准备 GitLab 镜像(关键前置步骤)
离线安装的核心是先获取 GitLab 镜像包,因为离线机器无法直接从 Docker Hub 拉取。
1. 拉取 GitLab 官方镜像
推荐使用社区版(CE),指定稳定版本(避免最新版兼容性问题),命令如下:
bash
# 拉取 GitLab CE 稳定版(示例:16.8.1,可替换为其他稳定版本)
docker pull gitlab/gitlab-ce:16.8.1-ce.0
2. 导出镜像为 tar 包(用于离线传输)
将拉取的镜像导出为本地 tar 文件,方便拷贝到离线机器,命令如下:
bash
# 导出镜像:格式 docker save -o [本地输出tar包路径] [镜像名:标签]
docker save -o /root/gitlab-ce-16.8.1.tar gitlab/gitlab-ce:16.8.1-ce.0
执行后,在 /root 目录下会生成 gitlab-ce-16.8.1.tar 镜像包,后续将该文件拷贝到离线机器。
二、离线机器:部署前准备
1. 拷贝镜像包到离线机器
通过 U 盘、移动硬盘、内网传输(若有内网互通)等方式,将 gitlab-ce-16.8.1.tar 拷贝到离线机器的任意目录(示例:/root 目录)。
2. 导入 GitLab 镜像
在离线机器上,使用 docker load 命令导入镜像包,命令如下:
bash
# 导入镜像:格式 docker load -i [本地tar包路径]
docker load -i /root/gitlab-ce-16.8.1.tar
导入完成后,可通过 docker images 命令验证,能看到 gitlab/gitlab-ce:16.8.1-ce.0 镜像即表示导入成功。
3. 创建本地挂载目录(持久化数据/配置/日志)
GitLab 的配置、数据、日志需要持久化到本地(避免容器删除后数据丢失),创建三个专属目录,命令如下:
bash
# 创建根目录
mkdir -p /data/gitlab
# 分别创建配置、数据、日志目录
mkdir -p /data/gitlab/config # 配置文件目录
mkdir -p /data/gitlab/data # 数据存储目录
mkdir -p /data/gitlab/logs # 日志文件目录
同时,赋予目录足够权限(避免容器读写失败):
bash
chmod -R 777 /data/gitlab
三、离线机器:启动 GitLab 容器
使用 docker run 命令启动容器,核心配置包含端口映射 、目录挂载 、访问地址配置,完整命令如下:
bash
docker run -d \
--name gitlab \
--restart always \
--privileged=true \
-p 80:80 \
-p 443:443 \
-p 2222:22 \
-v /data/gitlab/config:/etc/gitlab \
-v /data/gitlab/data:/var/opt/gitlab \
-v /data/gitlab/logs:/var/log/gitlab \
-e GITLAB_OMNIBUS_CONFIG="external_url 'http://192.168.1.100'; gitlab_rails['gitlab_shell_ssh_port'] = 2222;" \
gitlab/gitlab-ce:16.8.1-ce.0
命令参数说明(关键)
--name gitlab:指定容器名称为 gitlab,方便后续管理--restart always:容器异常退出或服务器重启后自动启动--privileged=true:赋予容器特权,避免权限不足问题- 端口映射:
80:80:主机 80 端口映射容器 80 端口(HTTP 访问端口)443:443:主机 443 端口映射容器 443 端口(HTTPS 访问端口,若不需要可删除)2222:22:主机 2222 端口映射容器 22 端口(SSH 克隆端口,避免与主机 22 端口冲突)
- 目录挂载:对应前面创建的三个本地目录,实现数据持久化
GITLAB_OMNIBUS_CONFIG:核心配置external_url 'http://192.168.1.100':指定 GitLab 访问地址(替换为你的离线机器内网 IP)gitlab_rails['gitlab_shell_ssh_port'] = 2222:指定 SSH 克隆端口(与主机映射的 2222 端口一致)
四、离线机器:GitLab 初始化与访问
1. 等待容器初始化完成
GitLab 启动后需要一定时间初始化(约 5-10 分钟,视机器配置而定),可通过以下命令查看启动日志,确认是否正常:
bash
# 实时查看 GitLab 容器日志
docker logs -f gitlab
当日志中出现 gitlab Reconfigured! 时,表示初始化完成,可停止日志查看(Ctrl+C)。
2. 获取 root 初始密码
GitLab 初始化完成后,root 初始密码存放在容器内的指定文件中,通过以下命令获取:
bash
# 进入容器查看密码文件,或直接读取密码
docker exec -it gitlab cat /etc/gitlab/initial_root_password
执行后,会显示一串随机密码(注意:密码有效期为 24 小时,需及时登录修改)。
3. 访问 GitLab 并修改密码
- 打开浏览器,输入之前配置的
external_url(示例:http://192.168.1.100),即可进入 GitLab 登录页面 - 使用用户名
root和上述获取的初始密码登录 - 登录后,系统会提示修改初始密码,按照提示设置新密码即可完成部署
五、后续维护常用命令
bash
# 重启 GitLab 容器
docker restart gitlab
# 停止 GitLab 容器
docker stop gitlab
# 查看 GitLab 容器状态
docker ps | grep gitlab
# 进入 GitLab 容器内部(用于修改配置等操作)
docker exec -it gitlab /bin/bash
总结
- 离线安装核心:有网机器拉取+导出镜像,离线机器导入+部署
- 关键配置:本地目录挂载(持久化数据)、端口映射(避免冲突)、
external_url配置(访问地址) - 初始化要点:等待
gitlab Reconfigured!日志、通过initial_root_password获取初始密码、及时修改 root 密码