遇见docker-compose

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
相关推荐
LaughingZhu1 小时前
Product Hunt 每日热榜 | 2026-05-21
前端·人工智能·经验分享·chatgpt·html
怕浪猫2 小时前
Electron 开发实战(一):从零入门核心基础与环境搭建
前端·electron·ai编程
小鹏linux2 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
前端若水3 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
Bigger3 小时前
mini-cc:一个轻量级 AI 编程助手的诞生
前端·ai编程·claude
涵涵(互关)4 小时前
Naive-ui树型选择器只显示根节点
前端·ui·vue
BY组态4 小时前
Ricon组态系统最佳实践:从零开始构建物联网监控平台
前端·物联网·iot·web组态·组态
BY组态4 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·物联网·iot·web组态·组态
SoaringHeart4 小时前
Flutter进阶:OverlayEntry 插入图层管理器 NOverlayZIndexManager
前端·flutter
放下华子我只抽RuiKe54 小时前
React 从入门到生产(四):自定义 Hook
前端·javascript·人工智能·深度学习·react.js·自然语言处理·前端框架