@@ -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 |