温馨提示×

GitLab如何与Docker集成使用

小樊
50
2025-10-06 01:33:09
栏目: 智能运维

GitLab与Docker集成使用指南
GitLab与Docker的集成主要围绕容器化部署GitLab实例通过GitLab CI/CD实现Docker化CI/CD流程两大核心场景,以下是详细步骤:

一、容器化部署GitLab实例

容器化部署GitLab可简化安装流程、提升可移植性,常用工具为Docker Compose(推荐)。

1. 准备环境

在Linux系统(如Ubuntu/CentOS)上安装Docker和Docker Compose:

  • 安装Docker
    Ubuntu/Debian系统使用sudo apt update && sudo apt install docker.io
    CentOS系统使用sudo yum install -y docker
    启动Docker服务并设置开机自启:sudo systemctl start docker && sudo systemctl enable docker
  • 安装Docker Compose
    下载最新版本并授权:
    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

2. 创建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配置持久化

注意:需修改hostnameexternal_url和端口映射,匹配你的网络环境。

3. 启动GitLab容器

docker-compose.yml所在目录执行:
docker-compose up -d
首次启动需等待几分钟,容器会自动拉取镜像并初始化GitLab。

4. 访问与配置GitLab

  • 访问实例:打开浏览器,输入http://localhost:8080(替换为你的external_url),进入GitLab登录页面。
  • 获取初始密码:首次登录需使用容器内生成的临时密码,执行以下命令查看:
    docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
  • 完成初始配置:设置管理员账号(root)密码,创建第一个用户或项目。

5. 常见维护操作

  • 获取容器IDdocker 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协同实现自动化流程

通过GitLab CI/CD结合Docker,可实现代码的容器化构建、测试、部署,确保环境一致性。

1. 前提条件

  • GitLab项目已启用CI/CD(默认开启)。
  • 已安装并注册GitLab Runner(推荐使用Docker方式,参考上文docker-compose.yml中的gitlab-runner配置)。

2. 配置.gitlab-ci.yml文件

在项目根目录创建.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 builddocker push)。
  • variables:配置Docker驱动和TLS(简化流程,生产环境建议启用TLS)。
  • before_script:登录GitLab容器 registry(需提前在GitLab项目设置中配置Container Registry,并创建访问令牌)。
  • stages:定义pipeline的三个阶段(构建→测试→部署),jobs按阶段顺序执行。

3. 触发Pipeline

.gitlab-ci.yml提交到GitLab仓库的main分支(或其他触发分支),GitLab会自动触发pipeline。

  • 查看pipeline状态:进入项目→CI/CDPipelines
  • 查看job详情:点击对应job可查看日志和执行结果。

注意事项

  • 数据持久化:容器化部署GitLab时,必须挂载配置、日志、数据卷(如/etc/gitlab/var/log/gitlab/var/opt/gitlab),避免容器重启后数据丢失。
  • 端口冲突:确保宿主机的端口(如8080、2222)未被占用,或修改docker-compose.yml中的端口映射。
  • 安全性:生产环境建议启用HTTPS(修改external_urlhttps://,并在GITLAB_OMNIBUS_CONFIG中配置Let’s Encrypt证书)、限制Runner权限、关闭用户注册功能。
  • Runner配置:GitLab Runner需注册到项目或群组,选择Docker executor(推荐)或Shell executor(根据需求选择)。

0