@@ -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容器化方案 |
@@ -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 |