在 Debian 上容器化部署 Jenkins 的完整指南
一 准备环境
- 安装 Docker(Debian 常用方式)
- 更新索引并安装:sudo apt-get update && sudo apt-get install -y docker.io
- 启动并设置开机自启:sudo systemctl start docker && sudo systemctl enable docker
- 验证:sudo docker run --rm hello-world
- 创建专用网络(便于与后续 Agent/构建容器互通)
- docker network create jenkins
- 说明
- 本方案使用官方镜像 jenkins/jenkins:lts,通过数据卷持久化 /var/jenkins_home,并映射 8080(Web)与 50000(Agent)端口。
二 快速启动与初始化
- 启动容器(使用数据卷持久化)
- docker run -d
–name jenkins
–network jenkins
-p 8080:8080
-p 50000:50000
-v jenkins_data:/var/jenkins_home
jenkins/jenkins:lts
- 获取初始管理员密码
- docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 访问与初始化
- 浏览器访问:http://<服务器IP>:8080
- 完成解锁后,选择安装推荐插件或按需选择(如 Pipeline、GitHub Integration、Docker 等),创建管理员用户。
三 进阶 在容器内使用 Docker(DinD 或挂载 Docker 套接字)
- 方案 A 挂载宿主机 Docker 套接字(简单,便于容器直接操控宿主机 Docker)
- 启动命令追加:-v /var/run/docker.sock:/var/run/docker.sock
- 注意:该方式赋予容器内较高权限,务必配合最小权限与安全措施。
- 方案 B Docker-in-Docker(DinD,隔离性更好)
- 启动 DinD 服务容器(作为 Docker 守护进程)
- docker run --name jenkins-docker --rm --detach
–privileged --network jenkins --network-alias docker
–env DOCKER_TLS_CERTDIR=/certs
–volume jenkins-docker-certs:/certs/client
–publish 2376:2376
docker:dind --storage-driver overlay2
- 启动 Jenkins 并连接到 DinD
- docker run --name jenkins-blueocean --restart=on-failure --detach
–network jenkins
–env DOCKER_HOST=tcp://docker:2376
–env DOCKER_CERT_PATH=/certs/client
–env DOCKER_TLS_VERIFY=1
-p 8080:8080 -p 50000:50000
-v jenkins_data:/var/jenkins_home
-v jenkins-docker-certs:/certs/client:ro
jenkins/jenkins:lts
- 说明
- 两种方案各有取舍:挂载套接字更简单,DinD 更隔离;生产环境建议结合权限控制、镜像白名单与网络策略。
四 安全与运维要点
- 防火墙放行:确保 8080 与 50000 端口对外开放(如使用 ufw/iptables)。
- 持久化与备份:所有 Jenkins 配置与作业数据均在 /var/jenkins_home,务必定期备份该数据卷(快照/离线拷贝)。
- 时间与 NTP:保持节点时间同步,避免因时间漂移导致构建与插件问题。
- 权限最小化:避免在容器内以 root 运行构建;为 Jenkins 代理配置最小权限的凭据与工具链。
- 升级与回滚:采用蓝绿或滚动方式升级 Jenkins 容器与插件;回滚时优先恢复 jenkins_data 卷到上一版本。