温馨提示×

ubuntu docker如何集成ci

小樊
39
2026-09-13 08:53:23
栏目: 智能运维

在 Ubuntu 上把 Docker 与 CI(持续集成) 结合起来,通常有三种常见场景。下面我用 最实用、最常见的方式 给你一个完整思路,并配以示例。


一、整体架构(最常见)

代码仓库 (Git)
   ↓ push / PR
CI 系统 (GitLab CI / GitHub Actions / Jenkins)
   ↓ 在 Ubuntu + Docker 中
构建镜像 → 运行测试 → 推送镜像

核心点:

  • Ubuntu 作为 CI 运行环境
  • Docker 负责构建、测试、隔离
  • CI 只负责“触发”和“编排”

二、Ubuntu 上准备 Docker(基础)

1. 安装 Docker

sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker

2. 当前用户免 sudo(可选)

sudo usermod -aG docker $USER
newgrp docker

3. 安装 Docker Compose(常用)

sudo apt install -y docker-compose

三、方式一:GitLab CI + Docker(最推荐)

1. Ubuntu 上安装 GitLab Runner

sudo apt install -y gitlab-runner

2. 注册 Runner(使用 Docker)

sudo gitlab-runner register

配置示例:

  • Executor: docker
  • Default image: ubuntu:22.04

3. 项目根目录 .gitlab-ci.yml

stages:
  - build
  - test

build:
  stage: build
  image: docker:24
  services:
    - docker:dind
  script:
    - docker build -t myapp:ci .

test:
  stage: test
  image: docker:24
  services:
    - docker:dind
  script:
    - docker run myapp:ci pytest

✅ 优点:

  • 原生支持 Docker
  • 非常适合微服务

四、方式二:GitHub Actions + 自建 Ubuntu Runner

1. Ubuntu 上添加 Runner

./config.sh --url https://github.com/xxx/xxx --token xxx
./run.sh

2. .github/workflows/ci.yml

name: CI

on: [push]

jobs:
  build:
    runs-on: self-hosted
    steps:
      - uses: actions/checkout@v4
      - name: Build
        run: docker build -t myapp .
      - name: Test
        run: docker run myapp pytest

✅ 优点:

  • 用你自己的 Ubuntu 机器
  • 性能可控

五、方式三:Jenkins + Docker(企业常用)

1. 用 Docker 启动 Jenkins

docker run -d \
  -p 8080:8080 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkins/jenkins

2. Jenkinsfile 示例

pipeline {
  agent any
  stages {
    stage('Build') {
      steps {
        sh 'docker build -t myapp .'
      }
    }
    stage('Test') {
      steps {
        sh 'docker run myapp pytest'
      }
    }
  }
}

六、典型 Dockerfile(CI 友好)

FROM python:3.11-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["pytest"]

七、常见坑(非常重要)

1. Docker in Docker 权限

sudo chmod 666 /var/run/docker.sock

2. CI 中不要用 latest

✅ 用 myapp:cicommit hash

3. 缓存加速

cache:
  paths:
    - .docker-cache

八、推荐组合(新手)

Ubuntu + GitLab CI + Docker
Ubuntu + GitHub Actions(self-hosted) + Docker


如果你愿意,可以告诉我:

  • GitLab / GitHub / Jenkins 哪个?
  • 前端 / 后端 / 多服务
  • 是否需要 自动部署到服务器

我可以直接帮你写一套 可复制的 CI 配置

0