yaml
version: "3.8"
services:
jenkins:
image: jenkins/jenkins:lts
container_name: jenkins
restart: always
ports:
- "8080:8080" # Jenkins Web UI
- "50000:50000" # Jenkins Agent 通信端口
volumes:
- jenkins_home:/var/jenkins_home # Jenkins 数据目录(命名卷)
- web_builds:/data/web_builds # 构建输出目录(与 nginx 共享)
networks:
- app_network
environment:
- JAVA_OPTS=-Djenkins.install.runSetupWizard=false # 可选:跳过初始设置向导
nginx:
image: nginx:alpine
container_name: nginx
restart: always
ports:
- "80:80" # HTTP 默认端口
- "8081-12000:8081-12000" # 额外服务端口
volumes:
- web_builds:/usr/share/nginx/html:ro # 静态文件目录(只读,与 jenkins 共享)
- ./nginx/conf.d:/etc/nginx/conf.d # Nginx 配置文件(磁盘挂载)
networks:
- app_network
# 命名卷定义
volumes:
jenkins_home:
driver: local
name: jenkins_home
web_builds:
driver: local
name: web_builds
# 网络定义
networks:
app_network:
driver: bridge
name: jenkins_nginx_network
docker常用命令
服务管理
bash
# 启动服务
docker-compose up -d
# 停止服务
docker-compose stop
# 重启服务
docker-compose restart
# 停止并删除容器
docker-compose down
# 停止并删除容器及卷数据(危险操作)
docker-compose down -v
日志查看
ini
# 查看所有服务日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f jenkins
docker-compose logs -f nginx
# 查看最近 100 行日志
docker-compose logs --tail=100 jenkins
服务操作
bash
# 进入 Jenkins 容器
docker-compose exec jenkins bash
# 进入 Nginx 容器
docker-compose exec nginx sh
# 重新加载 Nginx 配置(无需重启)
docker-compose exec nginx nginx -s reload
# 测试 Nginx 配置
docker-compose exec nginx nginx -t
数据管理
备份数据
bash
# 备份 Jenkins 数据
docker run --rm -v jenkins_home:/data -v $(pwd):/backup \
alpine tar czf /backup/jenkins_backup_$(date +%Y%m%d).tar.gz -C /data .
# 备份构建产物
docker run --rm -v web_builds:/data -v $(pwd):/backup \
alpine tar czf /backup/web_builds_backup_$(date +%Y%m%d).tar.gz -C /data .
恢复数据
bash
# 恢复 Jenkins 数据
docker run --rm -v jenkins_home:/data -v $(pwd):/backup \
alpine sh -c "cd /data && tar xzf /backup/jenkins_backup_YYYYMMDD.tar.gz"
# 恢复构建产物
docker run --rm -v web_builds:/data -v $(pwd):/backup \
alpine sh -c "cd /data && tar xzf /backup/web_builds_backup_YYYYMMDD.tar.gz"
查看卷信息
bash
# 列出所有卷
docker volume ls
# 查看卷详情
docker volume inspect jenkins_home
docker volume inspect web_builds
# 查看卷占用空间
docker system df -v
Nginx 配置
修改配置
编辑 ./nginx/conf.d/default.conf
文件,修改后重新加载:
bash
# 测试配置
docker-compose exec nginx nginx -t
# 重新加载配置
docker-compose exec nginx nginx -s reload
添加新站点
在 ./nginx/conf.d/
目录下创建新的配置文件,例如 mysite.conf
:
ini
server {
listen 8084;
server_name localhost;
root /usr/share/nginx/html/mysite;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
然后更新 docker-compose.yaml
添加端口映射:
bash
nginx:
ports:
- '80:80'
- '8081-8084:8081-8084' # 添加新端口
重启服务:
docker-compose up -d
故障排查
Jenkins 无法启动
bash
# 查看日志
docker-compose logs jenkins
# 检查权限
docker-compose exec jenkins ls -la /var/jenkins_home
# 清理并重启
docker-compose restart jenkins
Nginx 配置错误
bash
# 测试配置
docker-compose exec nginx nginx -t
# 查看错误日志
docker-compose logs nginx
# 恢复默认配置
git checkout nginx/conf.d/default.conf
docker-compose exec nginx nginx -s reload
容器无法访问共享卷
bash
# 检查卷挂载
docker-compose exec jenkins ls -la /data/web_builds
docker-compose exec nginx ls -la /usr/share/nginx/html
# 检查权限
docker-compose exec jenkins chmod -R 755 /data/web_builds
升级与维护
升级镜像
bash
# 拉取最新镜像
docker-compose pull
# 重新创建容器
docker-compose up -d --force-recreate
# 清理旧镜像
docker image prune -a