在 Ubuntu 上使用 Docker 部署与运维 Jenkins 的完整实践
一 环境准备与安装
- 更新系统并安装 Docker(Ubuntu 20.04/22.04/24.04 通用):
- 安装 Docker:sudo apt update && sudo apt install -y docker.io
- 启动并设置开机自启:sudo systemctl enable --now docker
- 可选:将当前用户加入 docker 组以避免每次使用 sudo(需重新登录生效):sudo usermod -aG docker $USER
- 拉取 Jenkins 镜像:docker pull jenkins/jenkins:lts
- 说明:Jenkins 官方镜像基于 Debian,在 Ubuntu 上运行稳定;LTS 版本适合生产环境。
二 快速启动与持久化
- 使用 Docker 运行 Jenkins(推荐命名卷持久化):
- docker run -d
–name jenkins
-p 8080:8080 -p 50000:50000
-v jenkins_data:/var/jenkins_home
-e JAVA_OPTS=“-Duser.timezone=Asia/Shanghai -Xmx2g -Xms512m”
–restart unless-stopped
jenkins/jenkins:lts
- 端口说明:8080 为 Web UI,50000 为代理(Agent)通信端口。
- 使用宿主机目录挂载(便于直接备份与审计):
- 准备目录并修正权限(容器内 Jenkins 默认以 uid=1000 运行):
- sudo mkdir -p /srv/jenkins_home
- sudo chown -R 1000:1000 /srv/jenkins_home
- 启动命令(示例映射 7071→8080,便于与 Nginx 共存):
- docker run -d
–name jenkins
-p 7071:8080 -p 50000:50000
-v /srv/jenkins_home:/var/jenkins_home
-e TZ=Asia/Shanghai
–restart unless-stopped
jenkins/jenkins:lts
- 获取初始管理员密码:
- docker logs jenkins | grep “initialAdminPassword”
- 或:docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 访问:打开浏览器访问 http://服务器IP:8080(或映射的 7071 端口)。
三 反向代理与子路径部署
- 使用 Nginx 作为反向代理,将 Jenkins 部署在子路径 /jenkins:
- 启动参数添加前缀(容器内 Jenkins 需识别前缀):
- -e JENKINS_OPTS=“–prefix=/jenkins” -e JENKINS_ARGS=“–prefix=/jenkins”
- Nginx 配置片段:
- location /jenkins {
proxy_pass http://127.0.0.1:7071;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
- 访问地址:http://你的域名/jenkins
- 提示:若部署在根路径(/),无需设置前缀。
四 性能优化与常见问题
- 插件镜像加速(首次安装插件更快):
- 进入更新目录:/srv/jenkins_home/updates
- 备份并替换 default.json 中的下载地址与域名:
- sed -i ‘s|updates.jenkins-ci.org/download|mirrors.tuna.tsinghua.edu.cn/jenkins|g’ default.json
- sed -i ‘s|www.google.com|www.baidu.com|g’ default.json
- 重启 Jenkins 容器后重试插件安装。
- Docker in Docker 与权限:
- 如需在容器内构建镜像,可挂载 Docker 套接字:
- -v /var/run/docker.sock:/var/run/docker.sock
- 注意安全风险;更推荐在宿主机或专用构建执行器上运行 Docker,或使用 rootless Docker。
- 常见问题速查:
- 权限错误:宿主机目录未给 uid=1000 导致启动失败,执行 chown -R 1000:1000 /srv/jenkins_home。
- 忘记密码:使用 docker logs 或 docker exec 读取 initialAdminPassword。
- 时区问题:设置 TZ=Asia/Shanghai 或 JAVA_OPTS 的时区参数。
- 插件安装慢:使用国内镜像替换 default.json 中的下载源。
五 生产级建议
- 资源与稳定性:为 Jenkins 设置合理的内存(如 -Xmx2g -Xms512m),并使用 –restart unless-stopped 保证异常自恢复。
- 数据与备份:对 /srv/jenkins_home 或命名卷定期做快照/备份;升级时先备份再替换容器。
- 网络与端口:仅开放必要端口(如 8080/50000 或仅 80/443 对外,内部转发到 Jenkins);与 Nginx 配合时优先 80/443。
- 安全加固:限制管理端口访问来源、开启 CSRF 保护、最小权限原则配置代理与凭据;定期更新 Jenkins 与插件版本。