GitLab与Docker集成使用指南
GitLab与Docker的集成主要围绕容器化部署GitLab实例和通过GitLab CI/CD实现Docker化CI/CD流程两大核心场景,以下是详细步骤:
容器化部署GitLab可简化安装流程、提升可移植性,常用工具为Docker Compose(推荐)。
在Linux系统(如Ubuntu/CentOS)上安装Docker和Docker Compose:
sudo apt update && sudo apt install docker.io;sudo yum install -y docker。sudo systemctl start docker && sudo systemctl enable docker。sudo curl -L "https://github.com/docker/compose/releases/download/v2.29.7/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose。在项目目录(如~/gitlab-ce)中创建docker-compose.yml,配置GitLab服务及可选的Runner服务(用于CI/CD):
version: '3.7'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest' # 使用最新社区版镜像
restart: always # 开机自启
hostname: 'localhost' # 替换为你的服务器IP或域名(如192.168.0.107)
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://localhost:8080' # 替换为实际访问地址
ports:
- "8080:80" # HTTP端口
- "8443:443" # HTTPS端口(可选)
- "2222:22" # SSH端口(避免与宿主机冲突)
volumes:
- "/home/docker/gitlab/config:/etc/gitlab" # 配置文件持久化
- "/home/docker/gitlab/logs:/var/log/gitlab" # 日志文件持久化
- "/home/docker/gitlab/data:/var/opt/gitlab" # 数据文件持久化(关键!)
gitlab-runner: # 可选:GitLab Runner服务(用于CI/CD)
image: 'gitlab/gitlab-runner:alpine'
restart: always
depends_on:
- gitlab # 依赖gitlab服务
volumes:
- "/var/run/docker.sock:/var/run/docker.sock" # 允许Runner访问Docker
- "/home/docker/gitlab-runner:/etc/gitlab-runner" # Runner配置持久化
注意:需修改hostname、external_url和端口映射,匹配你的网络环境。
在docker-compose.yml所在目录执行:
docker-compose up -d
首次启动需等待几分钟,容器会自动拉取镜像并初始化GitLab。
http://localhost:8080(替换为你的external_url),进入GitLab登录页面。docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password。docker ps(找到gitlab服务的容器ID)。docker exec -it <容器ID> /bin/bash。docker-compose exec gitlab gitlab-rake gitlab:backup:create(备份文件默认保存在/srv/gitlab/data/backups)。docker-compose exec gitlab gitlab-rake gitlab:backup:restore BACKUP=2025-10-06-12-00(替换为备份文件名)。通过GitLab CI/CD结合Docker,可实现代码的容器化构建、测试、部署,确保环境一致性。
docker-compose.yml中的gitlab-runner配置)。在项目根目录创建.gitlab-ci.yml,定义CI/CD pipeline(以Node.js项目为例):
image: docker:latest # 使用Docker镜像作为基础
services:
- docker:dind # 启用Docker-in-Docker(允许pipeline中运行Docker命令)
stages:
- build # 构建阶段
- test # 测试阶段
- deploy # 部署阶段(可选)
variables:
DOCKER_DRIVER: overlay2 # 指定Docker驱动(推荐)
DOCKER_TLS_CERTDIR: "" # 禁用TLS(简化配置)
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY # 登录GitLab容器 registry
build_job:
stage: build
script:
- echo "Building Docker image..."
- docker build -t $CI_REGISTRY_IMAGE:latest . # 构建镜像(使用项目仓库地址)
- docker push $CI_REGISTRY_IMAGE:latest # 推送镜像到GitLab容器 registry
test_job:
stage: test
script:
- echo "Running tests in Docker container..."
- docker pull $CI_REGISTRY_IMAGE:latest
- docker run $CI_REGISTRY_IMAGE:latest npm test # 运行测试(替换为你的测试命令)
deploy_job:
stage: deploy
script:
- echo "Deploying to production..."
- docker pull $CI_REGISTRY_IMAGE:latest
- docker-compose up -d --force-recreate # 部署到目标环境(如服务器,需提前配置docker-compose.yml)
only:
- main # 仅main分支触发部署(可根据需求调整)
关键说明:
image: docker:latest:使用Docker镜像作为pipeline的基础环境。services: - docker:dind:启用Docker-in-Docker,允许pipeline中运行Docker命令(如docker build、docker push)。variables:配置Docker驱动和TLS(简化流程,生产环境建议启用TLS)。before_script:登录GitLab容器 registry(需提前在GitLab项目设置中配置Container Registry,并创建访问令牌)。stages:定义pipeline的三个阶段(构建→测试→部署),jobs按阶段顺序执行。将.gitlab-ci.yml提交到GitLab仓库的main分支(或其他触发分支),GitLab会自动触发pipeline。
/etc/gitlab、/var/log/gitlab、/var/opt/gitlab),避免容器重启后数据丢失。docker-compose.yml中的端口映射。external_url为https://,并在GITLAB_OMNIBUS_CONFIG中配置Let’s Encrypt证书)、限制Runner权限、关闭用户注册功能。