DESKTOP-58BB7H3\ZJH 4 주 전
부모
커밋
d375ced029
4개의 변경된 파일587개의 추가작업 그리고 0개의 파일을 삭제
  1. +277
    -0
      Himp.TaskScheduling.Hangfire/Docker部署说明.md
  2. +88
    -0
      Himp.TaskScheduling.Hangfire/build_docker_image.bat
  3. +155
    -0
      Himp.TaskScheduling.Hangfire/deploy_container.bat
  4. +67
    -0
      Himp.TaskScheduling.Hangfire/install_docker.bat

+ 277
- 0
Himp.TaskScheduling.Hangfire/Docker部署说明.md 파일 보기

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

+ 88
- 0
Himp.TaskScheduling.Hangfire/build_docker_image.bat 파일 보기

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

+ 155
- 0
Himp.TaskScheduling.Hangfire/deploy_container.bat 파일 보기

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

+ 67
- 0
Himp.TaskScheduling.Hangfire/install_docker.bat 파일 보기

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

불러오는 중...
취소
저장