在 Ubuntu 上把 Docker 与 CI(持续集成) 结合起来,通常有三种常见场景。下面我用 最实用、最常见的方式 给你一个完整思路,并配以示例。
代码仓库 (Git)
↓ push / PR
CI 系统 (GitLab CI / GitHub Actions / Jenkins)
↓ 在 Ubuntu + Docker 中
构建镜像 → 运行测试 → 推送镜像
核心点:
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
newgrp docker
sudo apt install -y docker-compose
sudo apt install -y gitlab-runner
sudo gitlab-runner register
配置示例:
dockerubuntu:22.04.gitlab-ci.ymlstages:
- 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
✅ 优点:
./config.sh --url https://github.com/xxx/xxx --token xxx
./run.sh
.github/workflows/ci.ymlname: 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
✅ 优点:
docker run -d \
-p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'docker build -t myapp .'
}
}
stage('Test') {
steps {
sh 'docker run myapp pytest'
}
}
}
}
FROM python:3.11-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["pytest"]
sudo chmod 666 /var/run/docker.sock
latest✅ 用 myapp:ci 或 commit hash
cache:
paths:
- .docker-cache
✅ Ubuntu + GitLab CI + Docker
或
✅ Ubuntu + GitHub Actions(self-hosted) + Docker
如果你愿意,可以告诉我:
我可以直接帮你写一套 可复制的 CI 配置。