containerize-aspnetcore

containerize-aspnetcore

热门

创建针对项目定制的 Dockerfile 和 .dockerfile 文件,实现 ASP.NET Core 项目的容器化配置。

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

创建针对项目定制的 Dockerfile 和 .dockerfile 文件,实现 ASP.NET Core 项目的容器化配置。

ASP.NET Core Docker 容器化 Prompt

容器化需求

对下方配置中指定的 ASP.NET Core (.NET) 项目进行容器化,仅关注应用在 Linux Docker 容器中运行所需的各项变更。容器化过程应充分考虑此处列出的所有配置项。

请遵循 .NET Core 应用容器化的最佳实践,确保容器在性能、安全性和可维护性方面得到全面优化。

容器化配置项

本节包含容器化 ASP.NET Core 应用所需的具体设置与配置。运行此 Prompt 前,请确保已填入必要的信息。注意,大多数情况下只需填写前几项配置;对于不适用于当前项目的后续选项,保留默认值即可。

任何未专门指定的配置项都将使用默认值。默认值在 [方括号] 中给出。

项目基础信息

  1. 待容器化的项目:

    • [ProjectName (provide path to .csproj file)]
  2. 使用的 .NET 版本:

    • [8.0 or 9.0 (Default 8.0)]
  3. 使用的 Linux 发行版:

    • [debian, alpine, ubuntu, chiseled, or Azure Linux (mariner) (Default debian)]
  4. Docker 镜像构建阶段(build stage)的自定义基础镜像(填写 "None" 表示使用微软标准基础镜像):

    • [Specify base image to use for build stage (Default None)]
  5. Docker 镜像运行阶段(run stage)的自定义基础镜像(填写 "None" 表示使用微软标准基础镜像):

    • [Specify base image to use for run stage (Default None)]

容器配置

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

    • 主 HTTP 端口:[e.g., 8080]
    • 附加端口:[List any additional ports, or "None"]
  2. 运行容器的用户账号:

    • [User account, or default to "$APP_UID"]
  3. 应用 URL 配置:

    • [Specify ASPNETCORE_URLS, or default to "http://+:8080"]

构建配置

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

    • [List any specific build steps, or "None"]
  2. 构建容器镜像后必须执行的自定义构建步骤:

    • [List any specific build steps, or "None"]
  3. 需要配置的 NuGet 包源:

    • [List any private NuGet feeds with authentication details, or "None"]

依赖项

  1. 容器镜像中必须安装的系统软件包:

    • [Package names for the chosen Linux distribution, or "None"]
  2. 必须复制到容器镜像中的原生动态库:

    • [Library names and paths, or "None"]
  3. 必须安装的附加 .NET 工具:

    • [Tool names and versions, or "None"]

系统配置

  1. 必须在容器镜像中设置的环境变量:
    • [Variable names and values, or "Use defaults"]

文件系统

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

    • [Paths relative to project root, or "None"]
    • 容器中的目标位置:[Container paths, or "Not applicable"]
  2. 容器化时需要排除的文件/目录:

    • [Paths to exclude, or "None"]
  3. 需要配置的数据卷挂载点:

    • [Volume paths for persistent data, or "None"]

.dockerignore 配置

  1. 需要包含在 .dockerignore 文件中的匹配规则(.dockerignore 已自带常用默认项,此处为额外添加规则):
    • 附加匹配规则:[List any additional patterns, or "None"]

健康检查配置

  1. 健康检查端点:

    • [Health check URL path, or "None"]
  2. 健康检查间隔与超时时间:

    • [Interval and timeout values, or "Use defaults"]

附加指令

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

    • [Specific requirements, or "None"]
  2. 需要解决的已知问题:

    • [Describe any known issues, or "None"]

任务范围

  • ✅ 修改应用配置,确保应用程序设置和连接字符串可以从环境变量中读取
  • ✅ 为 ASP.NET Core 应用创建并配置 Dockerfile
  • ✅ 在 Dockerfile 中指定多阶段构建,以构建/发布应用并将产物复制到最终镜像
  • ✅ 配置 Linux 容器平台兼容性(Alpine、Ubuntu、Chiseled 或 Azure Linux (Mariner))
  • ✅ 正确处理各种依赖项(系统软件包、原生动态库、附加工具)
  • ❌ 不包含基础设施搭建(假定由其他环节独立处理)
  • ❌ 不修改容器化范围之外的代码

执行流程

  1. 审查上述容器化配置项,明确容器化需求
  2. 创建 progress.md 文件,通过复选框跟踪进度
  3. 检查项目 .csproj 文件中的 TargetFramework 元素,确定 .NET 版本
  4. 根据以下规则选择合适的 Linux 容器镜像:
  5. 在项目根目录下创建 Dockerfile 以实现应用容器化
    • Dockerfile 应使用多阶段构建:
      • 构建阶段:使用 .NET SDK 镜像构建应用
        • 先复制 csproj 文件
        • 若存在 NuGet.config,复制该文件并配置相关私有源
        • 还原 NuGet 包
        • 接着复制其余源代码,构建应用并发布至 /app/publish
      • 最终阶段:使用所选的 .NET 运行时镜像运行应用
        • 将工作目录设置为 /app
        • 按要求设置运行用户(默认设为非 root 用户,如 $APP_UID
          • 除非容器化配置另有要求,否则无需创建新用户,直接使用 $APP_UID 变量指定用户账号即可。
        • 将构建阶段发布的产物复制到最终镜像中
    • 务必全面落实容器化配置中的所有要求:
      • .NET 版本及 Linux 发行版
      • 暴露的端口
      • 容器运行用户
      • ASPNETCORE_URLS 配置
      • 系统软件包安装
      • 原生动态库依赖
      • 附加 .NET 工具
      • 环境变量
      • 文件/目录复制
      • 数据卷挂载点
      • 健康检查配置
  6. 在项目根目录下创建 .dockerignore 文件,排除 Docker 镜像中不需要的文件。.dockerignore 文件必须至少包含以下条目以及容器化配置中指定的附加匹配规则:
    • bin/
    • obj/
    • .dockerignore
    • Dockerfile
    • .git/
    • .github/
    • .vs/
    • .vscode/
    • **/node_modules/
    • *.user
    • *.suo
    • **/.DS_Store
    • **/Thumbs.db
    • 容器化配置中指定的任何附加规则
  7. 若容器化配置中指定了健康检查,配置相关检查:
    • 若提供了健康检查端点,在 Dockerfile 中添加 HEALTHCHECK 指令
    • 使用 curl 或 wget 检查健康端点
  8. 将已完成的任务标记为完成:[ ] → [✓]
  9. 持续推进,直至所有任务完成且 Docker 构建成功

构建与运行验证

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

docker build -t aspnetcore-app:latest .

如果构建失败,请查看错误信息并对 Dockerfile 或项目配置进行相应调整。最后汇报成功或失败状态。

进度追踪

维护一个格式如下的 progress.md 文件:

# 容器化进度跟踪

## 环境检测
- [ ] .NET 版本检测(版本:___)
- [ ] Linux 发行版选择(发行版:___)

## 配置变更
- [ ] 应用配置验证(确保支持环境变量)
- [ ] NuGet 包源配置(如适用)

## 容器化
- [ ] Dockerfile 创建
- [ ] .dockerignore 文件创建
- [ ] 使用 SDK 镜像创建构建阶段
- [ ] 复制 csproj 文件用于包还原
- [ ] 复制 NuGet.config(如适用)
- [ ] 使用运行时镜像创建运行阶段
- [ ] 非 root 用户配置
- [ ] 依赖项处理(系统软件包、原生库、工具等)
- [ ] 健康检查配置(如适用)
- [ ] 特殊需求实现

## 验证
- [ ] 审查容器化配置项,确保满足所有要求
- [ ] Docker 构建成功

各步骤之间无需停顿等待确认,请按部就班地持续推进,直到应用完成容器化且 Docker 构建成功。

只有当所有复选框均已打勾,才算真正完成! 这包括成功构建 Docker 镜像,以及妥善解决构建过程中出现的任何问题。

Dockerfile 示例

以下是基于 Linux 基础镜像的 ASP.NET Core (.NET) 应用 Dockerfile 示例。

# ============================================================
# 阶段 1:构建并发布应用
# ============================================================

# 基础镜像 - 选择合适的 .NET SDK 版本和 Linux 发行版
# 可选标签包括:
# - 8.0-bookworm-slim (Debian 12)
# - 8.0-noble (Ubuntu 24.04)
# - 8.0-alpine (Alpine Linux)
# - 9.0-bookworm-slim (Debian 12)
# - 9.0-noble (Ubuntu 24.04)
# - 9.0-alpine (Alpine Linux)
# 使用 .NET SDK 镜像构建应用
FROM mcr.microsoft.com/dotnet/sdk:8.0-bookworm-slim AS build
ARG BUILD_CONFIGURATION=Release

WORKDIR /src

# 先复制项目文件以提高缓存利用率
COPY ["YourProject/YourProject.csproj", "YourProject/"]
COPY ["YourOtherProject/YourOtherProject.csproj", "YourOtherProject/"]

# 若存在 NuGet 配置文件,进行复制
COPY ["NuGet.config", "."]

# 还原 NuGet 包
RUN dotnet restore "YourProject/YourProject.csproj"

# 复制源代码
COPY . .

# 如有需要,在此处执行自定义的预构建步骤
# RUN echo "Running pre-build steps..."

# 构建并发布应用
WORKDIR "/src/YourProject"
RUN dotnet build "YourProject.csproj" -c $BUILD_CONFIGURATION -o /app/build

# 发布应用
RUN dotnet publish "YourProject.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

# 如有需要,在此处执行自定义的构建后步骤
# RUN echo "Running post-build steps..."

# ============================================================
# 阶段 2:最终运行时镜像
# ============================================================

# 基础镜像 - 选择合适的 .NET 运行时版本和 Linux 发行版
# 可选标签包括:
# - 8.0-bookworm-slim (Debian 12)
# - 8.0-noble (Ubuntu 24.04)
# - 8.0-alpine (Alpine Linux)
# - 8.0-noble-chiseled (Ubuntu 24.04 Chiseled)
# - 8.0-azurelinux3.0 (Azure Linux)
# - 9.0-bookworm-slim (Debian 12)
# - 9.0-noble (Ubuntu 24.04)
# - 9.0-alpine (Alpine Linux)
# - 9.0-noble-chiseled (Ubuntu 24.04 Chiseled)
# - 9.0-azurelinux3.0 (Azure Linux)
# Uses the .NET runtime ima