linux

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:

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

5. 常见维护操作

二、GitLab CI/CD与Docker协同实现自动化流程

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

1. 前提条件

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分支触发部署(可根据需求调整)

关键说明

3. 触发Pipeline

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

注意事项

0
看了该问题的人还看了