containerize-aspnet-framework

containerize-aspnet-framework

热门

通过为项目定制创建 Dockerfile 和 .dockerfile 文件,将 ASP.NET (.NET Framework) 项目进行容器化。

3.7万Star
4569Fork
更新于 2026/7/14
SKILL.md
只读
名称
containerize-aspnet-framework
描述

通过为项目定制创建 Dockerfile 和 .dockerfile 文件,将 ASP.NET (.NET Framework) 项目进行容器化。

ASP.NET .NET Framework 容器化 Prompt

根据下方容器化设置中指定的 ASP.NET (.NET Framework) 项目进行容器化,仅聚焦于应用在 Windows Docker 容器中运行所需的修改。容器化过程应全面考量此处指明的所有配置项。

切记: 本项目为 .NET Framework 应用,而非 .NET Core。其容器化流程与 .NET Core 应用存在差异。

容器化设置

本节 Prompt 包含容器化 ASP.NET (.NET Framework) 应用所需的具体设置与配置。运行此 Prompt 前,请确认相关设置已填入必要信息。请注意,通常情况下只需填好前几项设置即可;后续设置若不适用于待容器化的项目,保持默认值即可。

未明确指定的设置均将采用默认值。默认值在 [方括号] 中标出。

项目基础信息

  1. 待容器化的项目:

    • [ProjectName(提供 .csproj 文件的路径)]
  2. 使用的 Windows Server SKU:

    • [Windows Server Core (默认) 或 Windows Server Full]
  3. 使用的 Windows Server 版本:

    • [2022、2019 或 2016(默认 2022)]
  4. Docker 镜像构建阶段 (build stage) 使用的自定义基础镜像(填 "None" 表示使用微软标准基础镜像):

    • [指定用于构建阶段的基础镜像(默认 None)]
  5. Docker 镜像运行阶段 (run stage) 使用的自定义基础镜像(填 "None" 表示使用微软标准基础镜像):

    • [指定用于运行阶段的基础镜像(默认 None)]

容器配置

  1. 容器镜像中需要暴露的端口:

    • 主 HTTP 端口:[例如 80]
    • 附加端口:[列出所有附加端口,或填 "None"]
  2. 容器运行所使用的用户账号:

    • [用户账号,或默认为 "ContainerUser"]
  3. 容器镜像中需要配置的 IIS 设置:

    • [列出所有具体 IIS 设置,或填 "None"]

构建配置

  1. 构建容器镜像前必须执行的自定义构建步骤:

    • [列出具体构建步骤,或填 "None"]
  2. 构建容器镜像后必须执行的自定义构建步骤:

    • [列出具体构建步骤,或填 "None"]

依赖项

  1. 容器镜像中需要注册到 GAC 的 .NET 程序集:

    • [程序集名称与版本,或填 "None"]
  2. 需要复制到容器镜像并安装的 MSI 安装包:

    • [MSI 名称与版本,或填 "None"]
  3. 容器镜像中必须注册的 COM 组件:

    • [COM 组件名称,或填 "None"]

系统配置

  1. 必须添加到容器镜像中的注册表键与值:

    • [注册表路径与值,或填 "None"]
  2. 必须在容器镜像中设置的环境变量:

    • [变量名与值,或填 "Use defaults"]
  3. 必须在容器镜像中安装的 Windows Server 角色与功能:

    • [角色/功能名称,或填 "None"]

文件系统

  1. 需要复制到容器镜像中的文件/目录:

    • [相对于项目根目录的路径,或填 "None"]
    • 容器内的目标位置:[容器内路径,或填 "Not applicable"]
  2. 需从容器化中排除的文件/目录:

    • [排除路径,或填 "None"]

.dockerignore 配置

  1. 需包含在 .dockerignore 文件中的匹配模式(.dockerignore 已具备通用默认项,此处为追加模式):
    • 附加模式:[列出所有附加模式,或填 "None"]

健康检查配置

  1. 健康检查端点:

    • [健康检查 URL 路径,或填 "None"]
  2. 健康检查间隔与超时时间:

    • [间隔与超时时间值,或填 "Use defaults"]

补充说明

  1. 容器化项目时必须遵循的其他指令:

    • [具体要求,或填 "None"]
  2. 需要处理的已知问题:

    • [描述已知问题,或填 "None"]

适用范围

  • ✅ 修改应用配置,确保使用 config builders 从环境变量中读取应用设置 (app settings) 和连接字符串 (connection strings)
  • ✅ 为 ASP.NET 应用创建并配置 Dockerfile
  • ✅ 在 Dockerfile 中指定多阶段构建 (multi-stage build),分别完成应用构建/发布并将产物复制到最终镜像
  • ✅ 配置 Windows 容器平台兼容性(Windows Server Core 或 Full)
  • ✅ 正确处理依赖项(GAC 程序集、MSI 安装包、COM 组件)
  • ❌ 不包含基础设施搭建(假定已单独处理)
  • ❌ 不包含容器化必需修改之外的代码调整

执行流程

  1. 审查上述容器化设置,明确容器化需求
  2. 创建 progress.md 文件,使用复选框追踪进度
  3. 检查项目 .csproj 文件中的 TargetFrameworkVersion 节点,确定 .NET Framework 版本
  4. 根据以下条件选择合适的 Windows Server 容器镜像:
  5. 检查所需 NuGet 包是否已安装。切勿自动安装缺失的包。如果未安装,用户必须手动安装。此时应暂停执行此 Prompt,提示用户使用 Visual Studio NuGet 包管理器或 Visual Studio 包管理器控制台进行安装。所需的包包括:
    • Microsoft.Configuration.ConfigurationBuilders.Environment
  6. 修改 web.config 文件,添加配置构建器 (configuration builders) 节点与相关设置,以便从环境变量读取应用设置和连接字符串:
    • 在 configSections 中添加 ConfigBuilders 节点
    • 在根节点下添加 configBuilders 节点
    • 为 appSettings 和 connectionStrings 配置 EnvironmentConfigBuilder
    • 示例结构:
      <configSections>
        <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
      </configSections>
      <configBuilders>
        <builders>
          <add name="Environment" type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Environment" />
        </builders>
      </configBuilders>
      <appSettings configBuilders="Environment">
        <!-- existing app settings -->
      </appSettings>
      <connectionStrings configBuilders="Environment">
        <!-- existing connection strings -->
      </connectionStrings>
      
  7. 在将要创建 Dockerfile 的文件夹中创建 LogMonitorConfig.json 文件,复制本 Prompt 末尾提供的参考 LogMonitorConfig.json 内容。除非容器化设置中另有指令,否则该文件内容严禁修改,必须与参考内容保持完全一致。
    • 尤其需注意,切勿更改日志记录的事件级别,若对 EventLog 源使用 Information 级别会导致产生不必要的干扰日志。
  8. 在项目根目录下创建 Dockerfile 以容器化应用
    • Dockerfile 应采用多阶段构建:
      • 构建阶段 (Build stage):使用 Windows Server Core 镜像构建应用
        • 构建阶段必须使用 mcr.microsoft.com/dotnet/framework/sdk 基础镜像,除非设置文件中指定了自定义基础镜像
        • 优先复制 sln、csproj 及 packages.config 文件
        • 若存在 NuGet.config,复制并配置私有包源
        • 还原 NuGet 包
        • 随后复制其余源码,并使用 MSBuild 将应用构建发布至 C:\publish
      • 最终阶段 (Final stage):使用选定的 Windows Server 镜像运行应用
        • 最终阶段必须使用 mcr.microsoft.com/dotnet/framework/aspnet 基础镜像,除非设置文件中指定了自定义基础镜像
        • LogMonitorConfig.json 文件复制到容器指定目录(如 C:\LogMonitor)
        • 从微软官方仓库下载 LogMonitor.exe 到同一目录
        • 设置工作目录为 C:\inetpub\wwwroot
        • 将构建阶段在 C:\publish 生成的发布产物复制到最终镜像中
        • 设置容器入口点 (ENTRYPOINT),配合 ServiceMonitor.exe 运行 LogMonitor.exe 以监控 IIS 服务
          • ENTRYPOINT [ "C:\\LogMonitor\\LogMonitor.exe", "C:\\ServiceMonitor.exe", "w3svc" ]
    • 务必综合考虑容器化设置中的所有需求:
      • Windows Server SKU 及版本
      • 暴露的端口
      • 容器运行用户账号
      • IIS 设置
      • GAC 程序集注册
      • MSI 安装
      • COM 组件注册
      • 注册表键值
      • 环境变量
      • Windows 角色与功能
      • 文件/目录复制
    • 参考本 Prompt 末尾给出的示例构建 Dockerfile,但需确保根据具体项目需求和设置进行定制。
    • 重要提示: 除非用户在设置文件中明确要求使用完整的 Windows Server 镜像,否则一律使用 Windows Server Core 基础镜像
  9. 在项目根目录下创建 .dockerignore 文件,将无需打入 Docker 镜像的文件排除。.dockerignore 文件必须至少包含以下基础项,以及容器化设置中额外指定的追加匹配模式:
    • packages/
    • bin/
    • obj/
    • .dockerignore
    • Dockerfile
    • .git/
    • .github/
    • .vs/
    • .vscode/
    • **/node_modules/
    • *.user
    • *.suo
    • **/.DS_Store
    • **/Thumbs.db
    • 容器化设置中指定的任何附加模式
  10. 若设置中有所要求,配置健康检查:
  • 若提供了健康检查端点,在 Dockerfile 中添加 HEALTHCHECK 指令
  1. 将 Dockerfile 引入项目,在项目文件中添加如下节点:<None Include="Dockerfile" />
  2. 标记已完成任务:[ ] → [✓]
  3. 持续推进,直至所有任务完成且 Docker 构建成功

构建与运行验证

在 Dockerfile 完成后,确认 Docker 构建成功。使用以下命令构建 Docker 镜像:

docker build -t aspnet-app:latest .

若构建失败,检查错误日志并对 Dockerfile 或项目配置进行相应调整。汇报成功/失败结果。

进度追踪

维护一个结构如下的 progress.md 文件:

# 容器化进度追踪

## 环境检测
- [ ] .NET Framework 版本检测(版本:___)
- [ ] Windows Server SKU 选择(SKU:___)
- [ ] Windows Server 版本选择(版本:___)

## 配置变更
- [ ] 修改 Web.config 以支持配置构建器
- [ ] NuGet 包源配置(如适用)
- [ ] 复制 LogMonitorConfig.json 并根据设置需求调整

## 容器化实施
- [ ] 创建 Dockerfile
- [ ] 创建 .dockerignore 文件
- [ ] 使用 SDK 镜像创建构建阶段
- [ ] 复制 sln、csproj、packages.config 及(如适用)NuGet.config 以还原依赖包
- [ ] 运行阶段镜像与运行时环境配置...

<!-- truncated for translation batch; full body continues in source -->