Ubuntu 上容器化部署 Jenkins 的完整实践
一 环境准备与安装 Docker
- 更新系统并安装 Docker:
- sudo apt update && sudo apt install -y docker.io
- sudo systemctl start docker && sudo systemctl enable docker
- 验证:docker --version
- 可选:将当前用户加入 docker 组以避免每次使用 sudo(重新登录后生效)
- sudo usermod -aG docker $USER
二 快速启动方式
- 使用 Docker 直接运行(适合快速体验)
- 启动容器:
- docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
- 获取初始管理员密码:
- docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 访问:http://<服务器IP>:8080
- 使用 Docker Compose(推荐,便于管理与扩展)
- 创建目录与权限:
- mkdir -p /opt/jenkins_home && sudo chown -R 1000:1000 /opt/jenkins_home
- 创建 docker-compose.yml(示例):
- version: ‘3.8’
services:
jenkins:
image: jenkins/jenkins:lts-jdk17
container_name: jenkins
user: “1000”
restart: unless-stopped
ports:
- “8080:8080”
- “50000:50000”
volumes:
- /opt/jenkins_home:/var/jenkins_home
environment:
- TZ=Asia/Shanghai
- JAVA_OPTS=-Xmx1024m -Xms512m
- 启动:
- 获取初始密码:
- docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 访问:http://<服务器IP>:8080
三 在容器内使用宿主机的 Docker(DinD 实践)
- 目标:让 Jenkins Pipeline 中可直接执行 docker build/run 等命令
- 方式 A(推荐,安全可控):挂载 Docker 套接字与客户端
- 在 docker-compose.yml 的 volumes 增加:
-
- /var/run/docker.sock:/var/run/docker.sock
-
- /usr/bin/docker:/usr/bin/docker
- 说明:
- 通过套接字复用宿主机 Docker 引擎,无需在容器内运行 Docker 守护进程
- 需确保挂载目录权限与容器内用户匹配(常见为 1000:1000)
- 方式 B(隔离更强):使用 Docker-in-Docker(DinD)
- 需额外启动一个 Docker 服务容器,并通过自定义网络让 Jenkins 与其通信(复杂度更高,通常无特殊隔离需求不必采用)
- 安全建议:
- 避免在容器内以 root 长期运行 Jenkins(示例中可用 user: “1000” 或创建专用用户)
- 若必须 root,务必限制权限与网络访问
四 初始化与安全加固
- 首次访问与初始化
- 打开 http://:8080,输入 initialAdminPassword
- 选择安装推荐插件,创建管理员账户,完成设置
- 防火墙与端口
- 开放访问端口(示例):
- sudo ufw allow 8080 && sudo ufw reload
- 反向代理与 HTTPS
- 使用 Nginx/Apache 反向代理并配置 Let’s Encrypt 证书,启用 HTTPS(推荐生产环境使用)
- 基础加固
- 修改默认端口(如将 8080 改为 8081)
- 启用强密码策略与登录安全(如限制失败登录、启用二步验证插件)
五 常见问题与排查
- 目录权限错误
- 现象:容器启动失败或无法写入数据
- 处理:确保挂载目录属主为 1000:1000
- sudo chown -R 1000:1000 /opt/jenkins_home
- 无法访问 Web 界面
- 现象:浏览器打不开
- 处理:检查防火墙与云安全组是否放行 8080;确认容器运行:docker ps
- 构建时报权限不足
- 现象:Pipeline 中执行 docker/ssh/scp 失败
- 处理:
- 优先使用挂载 docker.sock 的方式,并以 1000 用户运行
- 对目标主机配置 SSH 免密登录,并在 Jenkins 凭证中正确配置
- 查看日志定位问题
- docker logs jenkins 或 docker compose logs -f