| @@ -0,0 +1,277 @@ | |||||
| # Himp任务调度系统 Docker部署指南 | |||||
| 本文档提供了完整的Docker环境安装和应用部署指南。 | |||||
| ## 🚀 快速开始 | |||||
| ### 第一步:安装Docker环境 | |||||
| 运行自动安装脚本: | |||||
| ```cmd | |||||
| install_docker.bat | |||||
| ``` | |||||
| **注意**: | |||||
| - 需要管理员权限 | |||||
| - 可能需要重启计算机 | |||||
| - 确保启用WSL 2功能 | |||||
| ### 第二步:构建Docker镜像 | |||||
| 等Docker安装完成并启动后,运行: | |||||
| ```cmd | |||||
| build_docker_image.bat | |||||
| ``` | |||||
| ### 第三步:部署和管理容器 | |||||
| 运行管理脚本: | |||||
| ```cmd | |||||
| deploy_container.bat | |||||
| ``` | |||||
| ## 📋 系统要求 | |||||
| ### Windows系统要求 | |||||
| - Windows 10 64位:专业版、企业版或教育版 (build 19045 或更高) | |||||
| - Windows 11 64位:任何版本 22H2 或更高 | |||||
| - 至少 4GB RAM | |||||
| - 启用硬件虚拟化 (BIOS/UEFI设置) | |||||
| ### WSL 2要求 | |||||
| - WSL 版本 2.1.5 或更高 | |||||
| - 已启用"适用于Linux的Windows子系统"功能 | |||||
| ## 🐳 项目Docker配置 | |||||
| ### 现有配置文件 | |||||
| 1. **Dockerfile** (`Himp.TaskScheduling.Hangfire/Dockerfile`) | |||||
| - 基于 `mcr.microsoft.com/dotnet/aspnet:8.0` | |||||
| - 多阶段构建 | |||||
| - 已配置亚洲/上海时区 | |||||
| - 包含SSL配置优化 | |||||
| 2. **docker-compose.yml** | |||||
| - 服务编排配置 | |||||
| - 端口映射:8080、8081 | |||||
| - 日志卷挂载 | |||||
| - 环境变量配置 | |||||
| 3. **.dockerignore** | |||||
| - 排除构建不需要的文件 | |||||
| - 优化构建上下文 | |||||
| ### 应用技术栈 | |||||
| - .NET 8.0 Web API | |||||
| - Hangfire 任务调度 | |||||
| - Redis 缓存 | |||||
| - SQL Server 数据库 | |||||
| - MQTT 客户端 | |||||
| - Serilog 日志 | |||||
| ## 🔧 安装步骤详解 | |||||
| ### 手动安装Docker (可选) | |||||
| 如果自动脚本失败,可以手动安装: | |||||
| 1. **安装WSL 2** | |||||
| ```cmd | |||||
| # 以管理员身份运行 | |||||
| wsl --install | |||||
| ``` | |||||
| 2. **下载Docker Desktop** | |||||
| - 访问:https://www.docker.com/products/docker-desktop/ | |||||
| - 下载Windows版本 | |||||
| 3. **安装Docker Desktop** | |||||
| ```cmd | |||||
| "Docker Desktop Installer.exe" install --accept-license --backend=wsl-2 | |||||
| ``` | |||||
| 4. **启动并配置** | |||||
| - 启动Docker Desktop应用 | |||||
| - 接受服务协议 | |||||
| - 等待初始化完成 | |||||
| ## 🏗️ 构建镜像 | |||||
| ### 自动构建 | |||||
| ```cmd | |||||
| build_docker_image.bat | |||||
| ``` | |||||
| ### 手动构建 | |||||
| ```cmd | |||||
| cd F:\临河工作文件\交接文档\临河项目\临河未修改版本\源文件\任务调度\Himp.TaskScheduling.Hangfire | |||||
| docker build -t himp-task-scheduling:latest -f Himp.TaskScheduling.Hangfire/Dockerfile . | |||||
| ``` | |||||
| ### 构建参数说明 | |||||
| - `-t himp-task-scheduling:latest`:镜像名称和标签 | |||||
| - `-f Himp.TaskScheduling.Hangfire/Dockerfile`:指定Dockerfile路径 | |||||
| - `.`:构建上下文(当前目录) | |||||
| ## 🚀 运行容器 | |||||
| ### 方式1:单独运行 | |||||
| ```cmd | |||||
| docker run -d \ | |||||
| --name himp-task-container \ | |||||
| -p 8080:8080 \ | |||||
| -p 8081:8081 \ | |||||
| -v ./logs:/app/Logs \ | |||||
| -e ASPNETCORE_ENVIRONMENT=Production \ | |||||
| himp-task-scheduling:latest | |||||
| ``` | |||||
| ### 方式2:使用docker-compose | |||||
| ```cmd | |||||
| docker-compose up -d | |||||
| ``` | |||||
| ### 访问应用 | |||||
| - HTTP: http://localhost:8080 | |||||
| - HTTPS: https://localhost:8081 | |||||
| ## 📊 管理命令 | |||||
| ### 查看容器状态 | |||||
| ```cmd | |||||
| docker ps -a | |||||
| ``` | |||||
| ### 查看日志 | |||||
| ```cmd | |||||
| docker logs himp-task-container | |||||
| docker logs -f himp-task-container # 实时日志 | |||||
| ``` | |||||
| ### 进入容器 | |||||
| ```cmd | |||||
| docker exec -it himp-task-container /bin/bash | |||||
| ``` | |||||
| ### 停止容器 | |||||
| ```cmd | |||||
| docker stop himp-task-container | |||||
| ``` | |||||
| ### 删除容器 | |||||
| ```cmd | |||||
| docker rm himp-task-container | |||||
| ``` | |||||
| ## 💾 镜像管理 | |||||
| ### 查看镜像 | |||||
| ```cmd | |||||
| docker images himp-task-scheduling | |||||
| ``` | |||||
| ### 导出镜像 | |||||
| ```cmd | |||||
| docker save -o himp-task-scheduling.tar himp-task-scheduling:latest | |||||
| ``` | |||||
| ### 导入镜像 | |||||
| ```cmd | |||||
| docker load -i himp-task-scheduling.tar | |||||
| ``` | |||||
| ### 推送到仓库 | |||||
| ```cmd | |||||
| # 标记镜像 | |||||
| docker tag himp-task-scheduling:latest your-registry/himp-task-scheduling:latest | |||||
| # 推送镜像 | |||||
| docker push your-registry/himp-task-scheduling:latest | |||||
| ``` | |||||
| ## 🔧 故障排除 | |||||
| ### 常见问题 | |||||
| 1. **Docker命令无法识别** | |||||
| - 确保Docker Desktop已启动 | |||||
| - 重启命令行终端 | |||||
| 2. **端口占用** | |||||
| ```cmd | |||||
| netstat -ano | findstr :8080 | |||||
| taskkill /PID <PID> /F | |||||
| ``` | |||||
| 3. **权限问题** | |||||
| - 确保用户在docker-users组中 | |||||
| - 以管理员身份运行 | |||||
| 4. **WSL问题** | |||||
| ```cmd | |||||
| wsl --shutdown | |||||
| wsl --unregister docker-desktop | |||||
| # 重启Docker Desktop | |||||
| ``` | |||||
| ### 日志查看 | |||||
| ```cmd | |||||
| # Docker Desktop日志 | |||||
| # %APPDATA%\Docker\log.txt | |||||
| # 容器应用日志 | |||||
| docker logs himp-task-container | |||||
| # 宿主机日志目录 | |||||
| .\logs\ | |||||
| ``` | |||||
| ## 🔒 安全注意事项 | |||||
| 1. **生产环境** | |||||
| - 修改默认端口 | |||||
| - 配置防火墙规则 | |||||
| - 使用HTTPS证书 | |||||
| - 设置环境变量保护敏感信息 | |||||
| 2. **网络安全** | |||||
| - 限制容器网络访问 | |||||
| - 使用Docker secrets管理密钥 | |||||
| - 定期更新基础镜像 | |||||
| ## 📈 性能优化 | |||||
| ### 资源限制 | |||||
| ```cmd | |||||
| docker run -d \ | |||||
| --name himp-task-container \ | |||||
| --memory="2g" \ | |||||
| --cpus="1.5" \ | |||||
| -p 8080:8080 \ | |||||
| himp-task-scheduling:latest | |||||
| ``` | |||||
| ### 多阶段构建优化 | |||||
| - Dockerfile已使用多阶段构建 | |||||
| - 减少最终镜像大小 | |||||
| - 提高构建效率 | |||||
| ## 📞 技术支持 | |||||
| 如遇到问题,可以: | |||||
| 1. 查看Docker Desktop日志 | |||||
| 2. 检查容器运行状态 | |||||
| 3. 验证网络连接 | |||||
| 4. 确认端口占用情况 | |||||
| --- | |||||
| **版本信息** | |||||
| - 应用版本:.NET 8.0 | |||||
| - Docker版本:要求 20.10.0+ | |||||
| - 创建日期:2025年1月 | |||||
| **维护者** | |||||
| - 项目:Himp任务调度系统 | |||||
| - 部署:Docker容器化方案 | |||||
| @@ -16,7 +16,7 @@ namespace Himp.TaskScheduling | |||||
| SELECT * | SELECT * | ||||
| FROM [TaskScheduling].[TS_StandardTestTasks] st | FROM [TaskScheduling].[TS_StandardTestTasks] st | ||||
| WHERE st.ExecStas = N'未就绪' | WHERE st.ExecStas = N'未就绪' | ||||
| AND ((st.TestCode LIKE N'%Z%') OR (st.TestCode LIKE N'%RC%' AND st.Sampletype = '61')) | |||||
| AND ((st.TestCode LIKE N'%Z%') OR (st.TestCode LIKE N'%C%' AND st.Sampletype = '61')) | |||||
| AND NOT EXISTS ( | AND NOT EXISTS ( | ||||
| SELECT 1 FROM [TaskScheduling].[TS_SampleTestTasks] stt | SELECT 1 FROM [TaskScheduling].[TS_SampleTestTasks] stt | ||||
| WHERE stt.SampleCode = st.SampleCode | WHERE stt.SampleCode = st.SampleCode | ||||
| @@ -0,0 +1,88 @@ | |||||
| @echo off | |||||
| echo ===================================================== | |||||
| echo Docker镜像构建脚本 - Himp任务调度系统 | |||||
| echo ===================================================== | |||||
| echo. | |||||
| echo 1. 检查Docker是否已安装并运行... | |||||
| docker --version >nul 2>&1 | |||||
| if errorlevel 1 ( | |||||
| echo Docker未安装或未启动! | |||||
| echo 请先安装Docker Desktop并启动服务。 | |||||
| echo 运行 install_docker.bat 来安装Docker。 | |||||
| pause | |||||
| exit /b 1 | |||||
| ) else ( | |||||
| echo Docker已安装 | |||||
| docker --version | |||||
| ) | |||||
| echo. | |||||
| echo 2. 检查Docker服务状态... | |||||
| docker info >nul 2>&1 | |||||
| if errorlevel 1 ( | |||||
| echo Docker服务未启动! | |||||
| echo 请启动Docker Desktop应用程序。 | |||||
| pause | |||||
| exit /b 1 | |||||
| ) else ( | |||||
| echo Docker服务正常运行 | |||||
| ) | |||||
| echo. | |||||
| echo 3. 切换到项目根目录... | |||||
| cd /d "%~dp0" | |||||
| if not exist "Himp.TaskScheduling.Hangfire\Dockerfile" ( | |||||
| echo 错误:找不到Dockerfile文件! | |||||
| echo 请确保在项目根目录下运行此脚本。 | |||||
| pause | |||||
| exit /b 1 | |||||
| ) | |||||
| echo. | |||||
| echo 4. 显示当前目录结构... | |||||
| dir /b | |||||
| echo. | |||||
| echo 5. 开始构建Docker镜像... | |||||
| echo 镜像名称: himp-task-scheduling:latest | |||||
| echo. | |||||
| echo 正在构建Docker镜像,请耐心等待... | |||||
| docker build -t himp-task-scheduling:latest -f Himp.TaskScheduling.Hangfire/Dockerfile . | |||||
| if errorlevel 1 ( | |||||
| echo. | |||||
| echo ❌ 镜像构建失败! | |||||
| echo 请检查Dockerfile和项目配置。 | |||||
| pause | |||||
| exit /b 1 | |||||
| ) else ( | |||||
| echo. | |||||
| echo ✅ 镜像构建成功! | |||||
| ) | |||||
| echo. | |||||
| echo 6. 验证构建的镜像... | |||||
| docker images himp-task-scheduling | |||||
| echo. | |||||
| echo 7. 可选操作: | |||||
| echo. | |||||
| echo 运行容器: | |||||
| echo docker run -d -p 8080:8080 -p 8081:8081 --name himp-task-container himp-task-scheduling:latest | |||||
| echo. | |||||
| echo 使用docker-compose运行: | |||||
| echo docker-compose up -d | |||||
| echo. | |||||
| echo 保存镜像为tar文件: | |||||
| echo docker save -o himp-task-scheduling.tar himp-task-scheduling:latest | |||||
| echo. | |||||
| echo 查看运行中的容器: | |||||
| echo docker ps | |||||
| echo. | |||||
| echo ===================================================== | |||||
| echo 镜像构建完成! | |||||
| echo ===================================================== | |||||
| pause | |||||
| @@ -0,0 +1,155 @@ | |||||
| @echo off | |||||
| echo ===================================================== | |||||
| echo Docker容器部署管理脚本 | |||||
| echo ===================================================== | |||||
| echo. | |||||
| :menu | |||||
| echo 请选择操作: | |||||
| echo. | |||||
| echo 1. 启动容器 (单独运行) | |||||
| echo 2. 使用docker-compose启动 | |||||
| echo 3. 停止容器 | |||||
| echo 4. 查看容器状态 | |||||
| echo 5. 查看容器日志 | |||||
| echo 6. 进入容器终端 | |||||
| echo 7. 删除容器 | |||||
| echo 8. 导出镜像为tar文件 | |||||
| echo 9. 清理未使用的资源 | |||||
| echo 0. 退出 | |||||
| echo. | |||||
| set /p choice=请输入选择 (0-9): | |||||
| if "%choice%"=="1" goto start_container | |||||
| if "%choice%"=="2" goto start_compose | |||||
| if "%choice%"=="3" goto stop_container | |||||
| if "%choice%"=="4" goto show_status | |||||
| if "%choice%"=="5" goto show_logs | |||||
| if "%choice%"=="6" goto enter_container | |||||
| if "%choice%"=="7" goto remove_container | |||||
| if "%choice%"=="8" goto export_image | |||||
| if "%choice%"=="9" goto cleanup | |||||
| if "%choice%"=="0" goto exit | |||||
| goto menu | |||||
| :start_container | |||||
| echo. | |||||
| echo 启动单个容器... | |||||
| docker run -d ^ | |||||
| --name himp-task-container ^ | |||||
| -p 8080:8080 ^ | |||||
| -p 8081:8081 ^ | |||||
| -v "%cd%\logs:/app/Logs" ^ | |||||
| -e ASPNETCORE_ENVIRONMENT=Production ^ | |||||
| himp-task-scheduling:latest | |||||
| if errorlevel 1 ( | |||||
| echo ❌ 容器启动失败! | |||||
| ) else ( | |||||
| echo ✅ 容器启动成功! | |||||
| echo 应用访问地址: | |||||
| echo - HTTP: http://localhost:8080 | |||||
| echo - HTTPS: https://localhost:8081 | |||||
| ) | |||||
| pause | |||||
| goto menu | |||||
| :start_compose | |||||
| echo. | |||||
| echo 使用docker-compose启动... | |||||
| if exist "docker-compose.yml" ( | |||||
| docker-compose up -d | |||||
| if errorlevel 1 ( | |||||
| echo ❌ docker-compose启动失败! | |||||
| ) else ( | |||||
| echo ✅ 服务启动成功! | |||||
| ) | |||||
| ) else ( | |||||
| echo ❌ 找不到docker-compose.yml文件! | |||||
| ) | |||||
| pause | |||||
| goto menu | |||||
| :stop_container | |||||
| echo. | |||||
| echo 停止容器... | |||||
| docker stop himp-task-container 2>nul | |||||
| docker-compose down 2>nul | |||||
| echo 容器已停止 | |||||
| pause | |||||
| goto menu | |||||
| :show_status | |||||
| echo. | |||||
| echo 容器状态: | |||||
| docker ps -a --filter "name=himp" | |||||
| echo. | |||||
| echo 镜像列表: | |||||
| docker images himp-task-scheduling | |||||
| pause | |||||
| goto menu | |||||
| :show_logs | |||||
| echo. | |||||
| echo 查看容器日志: | |||||
| docker logs -f himp-task-container | |||||
| pause | |||||
| goto menu | |||||
| :enter_container | |||||
| echo. | |||||
| echo 进入容器终端... | |||||
| docker exec -it himp-task-container /bin/bash | |||||
| pause | |||||
| goto menu | |||||
| :remove_container | |||||
| echo. | |||||
| echo 删除容器... | |||||
| docker stop himp-task-container 2>nul | |||||
| docker rm himp-task-container 2>nul | |||||
| echo 容器已删除 | |||||
| pause | |||||
| goto menu | |||||
| :export_image | |||||
| echo. | |||||
| echo 导出镜像... | |||||
| set timestamp=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2% | |||||
| set timestamp=%timestamp: =0% | |||||
| set filename=himp-task-scheduling_%timestamp%.tar | |||||
| docker save -o "%filename%" himp-task-scheduling:latest | |||||
| if errorlevel 1 ( | |||||
| echo ❌ 导出失败! | |||||
| ) else ( | |||||
| echo ✅ 镜像已导出为: %filename% | |||||
| echo 文件大小: | |||||
| dir "%filename%" | |||||
| ) | |||||
| pause | |||||
| goto menu | |||||
| :cleanup | |||||
| echo. | |||||
| echo 清理未使用的Docker资源... | |||||
| echo 这将删除: | |||||
| echo - 未使用的容器 | |||||
| echo - 未使用的网络 | |||||
| echo - 未使用的镜像 | |||||
| echo - 构建缓存 | |||||
| echo. | |||||
| set /p confirm=确认清理?(y/N): | |||||
| if /i "%confirm%"=="y" ( | |||||
| docker system prune -a -f | |||||
| echo ✅ 清理完成! | |||||
| ) else ( | |||||
| echo 已取消清理 | |||||
| ) | |||||
| pause | |||||
| goto menu | |||||
| :exit | |||||
| echo. | |||||
| echo 感谢使用Docker部署脚本! | |||||
| exit /b 0 | |||||
| @@ -0,0 +1,67 @@ | |||||
| @echo off | |||||
| echo ===================================================== | |||||
| echo Docker Desktop 自动安装脚本 | |||||
| echo ===================================================== | |||||
| echo. | |||||
| echo 1. 检查Windows版本和系统要求... | |||||
| ver | |||||
| echo. | |||||
| echo 2. 检查是否已安装WSL... | |||||
| wsl --version 2>nul | |||||
| if errorlevel 1 ( | |||||
| echo WSL未安装,正在安装WSL 2... | |||||
| echo 请在管理员权限下运行以下命令: | |||||
| echo wsl --install | |||||
| echo. | |||||
| echo 安装WSL后请重启计算机,然后重新运行此脚本 | |||||
| pause | |||||
| exit /b 1 | |||||
| ) else ( | |||||
| echo WSL已安装 | |||||
| ) | |||||
| echo. | |||||
| echo 3. 下载Docker Desktop for Windows... | |||||
| set DOCKER_URL=https://desktop.docker.com/win/main/amd64/Docker%%20Desktop%%20Installer.exe | |||||
| set DOCKER_INSTALLER=Docker_Desktop_Installer.exe | |||||
| echo 正在下载Docker Desktop安装程序... | |||||
| powershell -Command "& {Invoke-WebRequest -Uri '%DOCKER_URL%' -OutFile '%DOCKER_INSTALLER%'}" | |||||
| if not exist "%DOCKER_INSTALLER%" ( | |||||
| echo 下载失败!请检查网络连接或手动下载。 | |||||
| echo 下载地址:https://www.docker.com/products/docker-desktop/ | |||||
| pause | |||||
| exit /b 1 | |||||
| ) | |||||
| echo. | |||||
| echo 4. 开始安装Docker Desktop... | |||||
| echo 安装过程中可能需要管理员权限,请允许。 | |||||
| echo. | |||||
| "%DOCKER_INSTALLER%" install --accept-license --backend=wsl-2 | |||||
| echo. | |||||
| echo 5. 安装完成! | |||||
| echo. | |||||
| echo 请按照以下步骤完成设置: | |||||
| echo 1. 重启计算机(如果提示需要) | |||||
| echo 2. 启动Docker Desktop | |||||
| echo 3. 接受Docker Desktop服务协议 | |||||
| echo 4. 等待Docker Desktop完全启动 | |||||
| echo. | |||||
| echo 安装完成后,请运行: docker --version | |||||
| echo 验证安装是否成功。 | |||||
| echo. | |||||
| pause | |||||
| echo 正在清理临时文件... | |||||
| if exist "%DOCKER_INSTALLER%" del "%DOCKER_INSTALLER%" | |||||
| echo. | |||||
| echo 安装脚本执行完成! | |||||
| pause | |||||