Asp.Net Core 使用 docker-compose.yml 开发与调试应用

参考

环境

软件/系统 版本 说明
Windows windows 10 专业版 22H2 64 位操作系统, 基于 x64 的处理器
Microsoft Visual Studio Community 2022 (64 位) - Current 版本 17.14.17
.NET 8
Docker Desktop 4.48.0
Docker Docker version 28.5.1, build e180ab8
Docker Compose Docker Compose version v2.40.0-desktop.1

注意事项

  • 创建项目时不建议勾选将解决方案和项目都放在同一目录
  • 在解决方案下如果手动添加了新的 WEB 项目,VS调试时在 Docker 会随机映射一个本机端口到容器的 8080 ,可以在 docker-compose.yml 内给对应容器指定端口映射进行绑定端口
  • 使用 VS 添加 docker-compose 相关配置后,在 docker-compose.yml 同级目录还存在 docker-compose.override.yml 文件, docker-compose.override.yml 会覆盖 docker-compose.yml 内的内容。(使用 docker-compose.override.yml 后,可以让不同环境共用 docker-compose.yml ,差异配置配置到 docker-compose.override.yml 内)
  • docker-compose.override.yml 给应用设置 ASPNETCORE_ENVIRONMENT=DevelopmentASPNETCORE_HTTP_PORTS=8080 ,如果手动编辑/新增了应用容器,记得在 docker-compose.override.yml 也给对应容器添加上相关环境变量
  • 使用 VS 调试时,VS 会自动创建 解决方案\obj\Docker\docker-compose.vs.debug.g.yml 文件,该文件会覆盖 docker-compose.yml 的配置,其中会添加一些配置如挂载目录到容器等相关操作,简化调试配置的内容。

正文

  1. 创建项目(当前创建的解决方案为 XqcTest 、项目为 XqcTest)

    • 不勾选将解决方案和项目都放在同一目录
    • 不勾选配置HTTPS
    • 不勾选启用容器支持
    • 不勾选不适用顶级语句
  2. 解决方案资源管理器->解决方案->xx项目->右键->添加->Docker支持,添加完成后,会在项目目录下新增 Dockerfile 文件,内容如下:(内容为自动生成,仅供参考;虽然当前 Dockerfile 存在多阶段构建,VS 会自动选择对应的构建阶段)

    # 请参阅 https://aka.ms/customizecontainer 以了解如何自定义调试容器,以及 Visual Studio 如何使用此 Dockerfile 生成映像以更快地进行调试。
    
    # 此阶段用于在快速模式(默认为调试配置)下从 VS 运行时
    FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
    USER $APP_UID
    WORKDIR /app
    EXPOSE 8080
    
    
    # 此阶段用于生成服务项目
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
    ARG BUILD_CONFIGURATION=Release
    WORKDIR /src
    COPY ["XqcTest/XqcTest.csproj", "XqcTest/"]
    RUN dotnet restore "./XqcTest/XqcTest.csproj"
    COPY . .
    WORKDIR "/src/XqcTest"
    RUN dotnet build "./XqcTest.csproj" -c $BUILD_CONFIGURATION -o /app/build
    
    # 此阶段用于发布要复制到最终阶段的服务项目
    FROM build AS publish
    ARG BUILD_CONFIGURATION=Release
    RUN dotnet publish "./XqcTest.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
    
    # 此阶段在生产中使用,或在常规模式下从 VS 运行时使用(在不使用调试配置时为默认值)
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "XqcTest.dll"]
    
  3. 解决方案资源管理器->解决方案->xx项目->右键->添加->容器业务流程协调支持程序支持,进行添加 Docker Compose 相关配置。(截图内容的参数均为默认值,未手动调整)
    image
    image

  4. 添加完成后会在解决方案资源管理器->解决方案内新增 docker-compose 文件夹;docker-compose 文件的真实系统路径在 解决方案资源管理器/
    image
    image

  5. docker-compose.yml 内配置了基础信息,在 docker-compose.override.yml 配置了端口与环境变量的相关内容。

    • docker-compose.yml
      services:
        xqctest:
      	image: ${DOCKER_REGISTRY-}xqctest
      	build:
      	  context: .
      	  dockerfile: XqcTest/Dockerfile
      
    • docker-compose.override.yml
      services:
        xqctest:
      	environment:
      	  - ASPNETCORE_ENVIRONMENT=Development
      	  - ASPNETCORE_HTTP_PORTS=8080
      	ports:
      	  - "8080"
      

其他

  1. 在项目启动设置内,切换为 docker-compose 后,点击启动即可进行开发调试。
    image

  2. 代码更新后,点击🔥按钮可以实时生效修改的内容。
    image

  3. 如果需要添加其他容器,在 docker-compose.yml 内编辑、添加即可。

posted @ 2025-10-23 10:20  夏秋初  阅读(7)  评论(0)    收藏  举报