温馨提示×

CentOS GitLab与Docker集成教程

小樊
48
2025-11-29 18:14:09
栏目: 智能运维

CentOS GitLab 与 Docker 集成教程

一 环境准备与安装

  • 系统建议:CentOS 7.x,推荐内存≥4GB(生产建议8GB+),磁盘≥50GB,CPU≥4核
  • 安装 Docker(CE):
    • 卸载旧版本(如有):sudo yum remove -y docker* containerd.io
    • 安装依赖:sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    • 添加仓库:sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    • 安装并启动:sudo yum install -y docker-ce docker-ce-cli containerd.io && sudo systemctl enable --now docker
    • 验证:docker version 或 docker run --rm hello-world
  • 安装 Docker Compose(可选但推荐):
    • 下载二进制:sudo curl -L “https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
    • 赋权:sudo chmod +x /usr/local/bin/docker-compose
    • 验证:docker-compose --version
  • 防火墙放行(如启用 firewalld):sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload。

二 使用 Docker Compose 部署 GitLab 与 Registry

  • 目录与持久化:
    • 建议目录:/data/gitlab/{config,logs,data}(权限 755,属主可设为 997:997 以匹配容器内 git 用户)
  • 示例 docker-compose.yml(同时启用内置 Container Registry):
    • 端口说明:80/443 为 GitLab Web,5000 为 Registry,2222 为容器内 SSH(宿主机 22 常被占用)
    • 如需使用域名与证书,将 external_url 与 registry_external_url 改为 https:// 并配置证书路径

version: “3.6” services: gitlab: image: gitlab/gitlab-ce:latest container_name: gitlab restart: unless-stopped hostname: ‘gitlab.example.com’ environment: GITLAB_OMNIBUS_CONFIG: | external_url ‘http://gitlab.example.com’ gitlab_rails[‘gitlab_shell_ssh_port’] = 2222 registry_external_url ‘http://gitlab.example.com:5000’ registry[‘enable’] = true ports: - “80:80” - “443:443” - “5000:5000” - “2222:22” volumes: - /data/gitlab/config:/etc/gitlab - /data/gitlab/logs:/var/log/gitlab - /data/gitlab/data:/var/opt/gitlab

  • 启动与初始化:
    • 启动:docker-compose up -d
    • 首次访问:http://服务器IP 或域名,设置 root 初始密码
    • 进入 Admin Area → Settings → General → Container Registry,勾选 Enable Container Registry
    • 如需域名与证书,改为 https 并在 GitLab 管理界面或配置中设置证书路径后执行:docker exec -it gitlab gitlab-ctl reconfigure

三 登录与推送镜像到内置 Registry

  • 登录 Registry(使用 GitLab 用户名 + 密码,或个人访问令牌):
    • docker login gitlab.example.com:5000
  • 构建并推送镜像(项目路径格式:<域名:端口>/<命名空间>/<仓库>:<标签>):
    • docker build -t gitlab.example.com:5000/your-group/your-app:latest .
    • docker push gitlab.example.com:5000/your-group/your-app:latest
  • 拉取镜像:
    • docker pull gitlab.example.com:5000/your-group/your-app:latest
  • 常见问题排查:
    • 登录失败:确认 Registry 已启用、端口开放、凭据正确(令牌需在 GitLab 个人设置中生成)
    • 推送被拒:项目 Container Registry 权限是否允许(项目设置 → Repository → Container Registry)
    • 证书问题:HTTP 仅用于测试;生产请启用 HTTPS/TLS

四 在 GitLab CI/CD 中使用 Docker

  • 安装并注册 Runner(在 CentOS 上以 Docker 执行器为例):

    • 安装 Runner(示例):curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash sudo yum install -y gitlab-runner
    • 注册 Runner:sudo gitlab-runner register(按提示填写 GitLab 地址、项目注册令牌、执行器选 docker
    • 配置 Runner 使用 Docker(示例 /etc/gitlab-runner/config.toml 片段): [[runners]] name = “docker-runner” url = “https://gitlab.example.com/” token = “TOKEN” executor = “docker” [runner.docker] tls_verify = false image = “docker:stable” privileged = true disable_cache = false volumes = [“/cache”, “/var/run/docker.sock:/var/run/docker.sock”]
  • 示例 .gitlab-ci.yml(构建并推送到内置 Registry): stages:

    • build
    • test
    • push

    variables: REGISTRY: gitlab.example.com:5000 IMAGE: $REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_SHA

    build: stage: build image: docker:stable services: - docker:dind script: - docker build -t $IMAGE .

    test: stage: test image: docker:stable script: - docker run --rm $IMAGE ./run-tests.sh

    push: stage: push image: docker:stable services: - docker:dind script: - echo “$CI_REGISTRY_PASSWORD” | docker login -u “$CI_REGISTRY_USER” --password-stdin $REGISTRY - docker push $IMAGE only: - main

  • 说明:

    • 使用 docker:dind(Docker-in-Docker)需要在 Runner 配置中开启 privileged,并确保内核开启 overlay2(生产建议)
    • CI 变量 CI_REGISTRY_USER/CI_REGISTRY_PASSWORD 可在项目设置 → CI/CD → Variables 中配置(推荐)

五 安全加固与运维要点

  • HTTPS/TLS:
    • 为 GitLab 与 Registry 配置有效证书(如 Let’s Encrypt),或在前置 Nginx/Ingress 终止 TLS
    • 证书变更后执行:docker exec -it gitlab gitlab-ctl reconfigure
  • 访问控制:
    • 利用 GitLab 项目/组的 权限模型 控制 Registry 推送/拉取
    • 可在反向代理层增加 IP 白名单速率限制
  • 镜像安全:
    • 启用 Docker Content Trust(DCT) 进行镜像签名与验证
  • 存储与性能:
    • 测试环境可用本地存储;生产建议对接 S3 等对象存储(registry[‘storage’] 配置)
  • 备份与恢复:
    • 定期备份数据卷(/data/gitlab),可使用脚本或编排工具实现一致性快照
  • 升级与维护:
    • 遵循“先备份、后升级”的流程;变更前在测试环境验证
    • 升级 GitLab 容器:docker-compose pull && docker-compose up -d(注意版本兼容与数据卷迁移)

0