Concourse CI 的 Docker Compose 部署指南
2025-07-07 03:36:49作者:农烁颖Land
概述
Concourse 是一个现代化的持续集成和持续交付系统,采用声明式管道配置方式。本文将通过技术专家的视角,详细解析 Concourse 官方仓库中的 docker-compose.yml 文件,帮助开发者理解如何通过 Docker Compose 快速部署 Concourse 环境。
网络配置
该配置首先定义了一个支持 IPv6 的网络环境:
networks:
default:
enable_ipv6: true
ipam:
driver: default
config:
- subnet: fdf1:f4a2:d53::/64
gateway: fdf1:f4a2:d53::ffff
这种配置确保了 Concourse 组件间的通信既支持 IPv4 也支持 IPv6,为现代网络环境提供了更好的兼容性。
服务组件
Concourse 系统由三个主要服务组成:数据库(PostgreSQL)、Web 服务和 Worker 节点。
1. 数据库服务 (db)
db:
image: postgres:${POSTGRES_TAG:-latest}
shm_size: 1gb
ports: [6543:5432]
environment:
POSTGRES_DB: concourse
POSTGRES_USER: dev
POSTGRES_PASSWORD: dev
POSTGRES_HOST_AUTH_METHOD: ${AUTH_METHOD:-trust}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dev -d concourse"]
interval: 3s
timeout: 3s
retries: 5
关键点解析:
- 使用 PostgreSQL 作为后端数据库
- 配置了 1GB 的共享内存(shm_size)以优化性能
- 通过健康检查确保服务可用性
- 默认使用信任认证方式(trust),可通过环境变量覆盖
2. Web 服务 (web)
web:
build: .
image: concourse/concourse:local
command: web
depends_on:
db:
condition: service_healthy
ports: [8080:8080]
networks:
- default
volumes:
- .:/src
- "./hack/keys:/concourse-keys"
environment:
CONCOURSE_SESSION_SIGNING_KEY: /concourse-keys/session_signing_key
CONCOURSE_TSA_AUTHORIZED_KEYS: /concourse-keys/authorized_worker_keys
CONCOURSE_TSA_HOST_KEY: /concourse-keys/tsa_host_key
# 其他环境变量...
Web 服务是 Concourse 的控制中心,提供 API 和用户界面。关键配置包括:
- 依赖数据库服务,且仅在数据库健康时启动
- 挂载本地目录和密钥文件
- 配置了多个安全相关的密钥路径
- 启用了多项高级功能如跨步骤(ACROSS_STEP)和资源因果关系追踪
3. Worker 服务 (worker)
worker:
build: .
image: concourse/concourse:local
command: worker
privileged: true
cgroup: host
networks:
- default
sysctls:
- net.ipv6.conf.all.disable_ipv6=0
depends_on: [web]
ports:
- 7777:7777
- 7788:7788
volumes: ["./hack/keys:/concourse-keys"]
stop_signal: SIGUSR2
environment:
CONCOURSE_RUNTIME: containerd
# 其他环境变量...
Worker 节点负责执行实际的任务,关键特性包括:
- 需要特权模式(privileged)以支持容器化任务
- 使用主机 cgroup 命名空间
- 配置了 Containerd 作为运行时
- 启用了 DNS 代理功能以兼容 Docker Compose 的 DNS
- 使用特定的停止信号(SIGUSR2)确保优雅关闭
安全配置
该配置包含了 Concourse 的安全相关设置:
- 会话签名密钥(CONCOURSE_SESSION_SIGNING_KEY)
- TSA 主机密钥(CONCOURSE_TSA_HOST_KEY)
- 授权的工作节点密钥(CONCOURSE_TSA_AUTHORIZED_KEYS)
- 工作节点私钥(CONCOURSE_TSA_WORKER_PRIVATE_KEY)
这些密钥文件通过卷(volumes)挂载到容器中,确保了安全隔离。
开发友好特性
配置中特别考虑了开发环境的需求:
- 预配置了两个本地用户(test 和 guest)
- 将 test 用户设为 main 团队的成员
- 启用了调试级别的日志(CONCOURSE_LOG_LEVEL: debug)
- 挂载了源代码目录便于开发调试
高级功能启用
该配置默认启用了多个 Concourse 的高级功能:
- 管道实例(CONCOURSE_ENABLE_PIPELINE_INSTANCES)
- 跨步骤(CONCOURSE_ENABLE_ACROSS_STEP)
- 缓存流式卷(CONCOURSE_ENABLE_CACHE_STREAMED_VOLUMES)
- 资源因果关系(CONCOURSE_ENABLE_RESOURCE_CAUSALITY)
这些功能为复杂的 CI/CD 流程提供了更强大的支持。
部署建议
- 确保 Docker 和 Docker Compose 已正确安装
- 创建必要的密钥文件并放置在 hack/keys 目录下
- 根据需要调整环境变量
- 运行
docker-compose up
启动服务 - 访问 http://localhost:8080 使用预配置的 test/test 账号登录
总结
这份 docker-compose.yml 文件提供了一个完整的 Concourse CI 开发环境配置,包含了数据库、Web 服务和 Worker 节点的完整设置。通过理解这个配置文件,开发者可以快速搭建 Concourse 环境,并根据实际需求进行调整和扩展。配置中考虑到了安全性、网络兼容性和开发便利性,是学习和开发 Concourse 的理想起点。