使用 Visual Studio Code Docker 工具调试 .NET 容器

作者:Chet Husk
排版:Alan Wang

Visual Studio Code Docker 工具已发布1.26.0版本,这个版本为使用 .NET SDK 构建和调试容器映像提供了内置支持。

VS Code 中的 Docker 调试

Visual Studio Code Docker 工具使开发人员可以轻松入门容器。它提供了 Dockerfile 模板,用于构建、运行和调试从 Dockerfile 生成的容器的集成,并提供编辑器内对许多其他 Docker 和容器相关工具的访问。您可以在 Visual Studio Marketplace 中了解有关此工具的更多信息。

以前,Docker 工具提供了为 .NET 项目搭建 Dockerfile 的能力。Dockerfile 大致如下所示:

FROM mcr.microsoft.com/dotnet/runtime:8.0-preview AS base
WORKDIR /appUSER app
FROM mcr.microsoft.com/dotnet/sdk:8.0-preview AS build
ARG configuration=Release
WORKDIR /src
COPY ["MinimalApiSharp.csproj", "./"]
RUN dotnet restore "MinimalApiSharp.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "MinimalApiSharp.csproj" -c $configuration -o /app/buildFROM build AS publish
ARG configuration=Release
RUN dotnet publish "MinimalApiSharp.csproj" -c $configuration -o /app/publish /p:UseAppHost=falseFROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MinimalApiSharp.dll"]

这为构建高效容器映像奠定了良好的基础,但还有很多开箱即用的东西需要理解。用户面临着了解多阶段 Dockerfile、容器构建参数,以及确保构建和发布输出的路径在各个阶段保持一致的问题。

使用 .NET SDK 构建容器

从 .NET 7 开始,.NET SDK 能够通过 dotnet publish 轻松创建容器映像。 使用单个 PackageReference(如果您使用 7.0.300 或更高版本的 SDK,则不需要任何软件包!),
dotnetpublish -p PublishProfile=DefaultContainer 命令会为您的应用程序生成一个工作容器映像。它具有开箱即用的安全默认设置,并允许用户自定义生成容器的所有方面。

然而,将这些生成的容器集成到工具中一直存在障碍。Visual Studio Code 新版本的 Docker 工具弥补了这一点,通过 Visual Studio Code 中的启动配置机制,对容器化应用程序进行调试变得轻而易举。

将其结合

让我们看看如何在 VSCode 中将 SDK 工具和 Docker 工具结合在一起。

首先,使用 .NET SDK 创建一个新的 Web 项目并在 Visual Studio Code 中打开它。我将在这里使用 .NET 8 preveiw 6 SDK。

> dotnet new web -n MyContainerizedApp
The template "ASP.NET Core Empty" was created successfully.Processing post-creation actions...
Restoring D:\Code\Scratch\MyContainerizedApp\MyContainerizedApp.csproj:
Restore complete (1.0s)Build succeeded in 1.4s
Restore succeeded.
> cd MyContainerizedApp
> code .

编辑器启动后,您应该可以按 F5(或您绑定到
workbench.action.debug.start 命令的任何组合键)获得一个选择菜单,如下所示:
在这里插入图片描述

此菜单上要查找的关键项是 Docker: Debug in Container。此启动方法会将您的应用程序构建到容器中,然后自动启动带有附加调试工具的容器! 如果您从此菜单中选择它,您将看到另一个重要选项:
在这里插入图片描述
这就是与 .NET SDK 的全新整合。如果您在此处选择“Use a Dockerfile”,那么您可以根据仓库中的 Dockerfile 使用 Docker 来构建容器。但如果您选择新的“Use .NET SDK”选项,则 .NET SDK 中的内置容器化工具将用于构建容器,然后 Docker 将用于运行和调试该容器。

一旦选择“Use .NET SDK”选项,您应该会看到构建容器的工具。它将出现在任务终端中(通常位于编辑器窗口的底部),看起来像这样:

* Executing task: dotnet-container-sdk: debug> dotnet publish --os "linux" --arch "x64" -p: PublishProfile=Defau1tContainer --configuration "Debug" -p:ContainerImageTag=dev
<MSBui1d version 17.7.0+5785ed5c2 for .NETDetermining projects to restore...Restored d:\Code\Scratch\MyContainerizedApp\MyContainerizedApp.csproj (in 2.03 sec).
C:\Progran Files\dotnet\sdk\8.0.100-preview.6.23330.14\Sdks\microsoft.NET.sdk\targets\microsoft.NET.Runtimeldentifierlnference.
targets(314,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [d:\Code\Scratch\MyContainerizedApp\MyContainerizedApp.csproj]MyContainerizedApp -> d:\Code\Scratch\MyContainerizedApp\bin\Debug\net8.0\linux-x64\MyContainerizedApp.dllMyContainerizedApp -> d:\Code\Scratch\MyContainerizedApp\bin\Debug\net8.0\linux-x64\publish\Building image 'mycontainerizedapp' with tags dev on top of base image mcr.microsoft.com/dotnet/aspnet:8.0.0-preview.6

终端输出显示了一些有趣的内容:用于构建容器的 dotnet publish 命令,以及 MSBuild 输出详细说明了应用程序容器的创建过程。
经过短暂的容器构建,VSCode Docker 工具将启动生成的容器,并另外打开一个指向新启动的应用程序的浏览器窗口:
在这里插入图片描述
这非常简单,从这里开始,您可以使用 Visual Studio Code Docker 工具的所有现有功能来与正在运行的容器进行交互。

下一步计划?

这只是 Visual Studio Code Docker 工具和 .NET SDK 集成的开端。

未来 SDK 容器工具的增强功能将允许自动映射 SDK 生成的容器中的端口,并且 SDK 容器团队正在考虑深化与 Docker 的集成,以便更轻松地使用 Docker Compose。

我们希望您尝试使用 .NET SDK 来容器化您的应用程序!您可以详细了解如何使用 dotnetpublish 容器化 .NET 应用程序,然后了解如何自定义生成的容器。

请尝试一下 Visual Studio Code的 Docker 扩展的新功能,让我们知道您的想法,如果您对 .NET SDK 容器工具有反馈,请务必访问 repo 并开始讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/76075.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BC108 矩阵交换

描述 KiKi有一个矩阵&#xff0c;他想知道经过k次行变换或列变换后得到的矩阵。请编程帮他解答。 输入描述 第一行包含两个整数n和m&#xff0c;表示一个矩阵包含n行m列&#xff0c;用空格分隔。 (1≤n≤10,1≤m≤10) 从2到n1行&#xff0c;每行输入m个整数&#xff08;范围-…

消息中间件的选择:RabbitMQ是一个明智的选择

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; MQ&#xff08;Message Queue&#xff09; MQ&#xff08;消息队列&#xff09;是一种用于在应用程序之间进行异步通信的技术&#xff1b;允许应用程序通过发送和接收…

Win10+anaconda+CUDA+pytorch+vscode配置

Win10anacondaCUDApytorchvscode配置 1.安装anaconda2.安装CUDA确认CUDA版本确认CUDA和pytorch版本安装CUDA 3.安装cudnn4.安装Pytorch5.vscode配置安装VScodevscode配置pytorch环境 1.安装anaconda 官网https://www.anaconda.com 下载安装&#xff0c;路径全英文然后记得有一…

成集云 | 乐享问题邀请同步企微提醒 | 解决方案

源系统成集云目标系统 方案介绍 腾讯乐享是腾讯公司开发的一款企业社区化知识管理平台&#xff0c;它提供了包括知识库、问答、课堂、考试、活动、投票和论坛等核心应用。这个平台凝聚了腾讯10年的管理经验&#xff0c;可以满足政府、企业和学校在知识管理、学习培训、文化建…

数据结构之并查集

并查集 1. 并查集原理2. 并查集实现3. 并查集应用3.1 省份数量3.2 等式方程的可满足性 4. 并查集的优缺点及时间复杂度 1. 并查集原理 并查表原理是一种树型的数据结构&#xff0c;用于处理一些不相交集合的合并及查询问题。并查集的思想是用一个数组表示了整片森林&#xff0…

Spring Clould 负载均衡 - Ribbon

视频地址&#xff1a;微服务&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; Ribbon-负载均衡原理&#xff08;P14&#xff09; 具体实现时通过LoaBalanced注解实现&#xff0c;表示RestTemplate要被Ribbon拦截处理 orderservice调用user时候&#xff0c…

AWS WAF实战、优势对比和缺陷解决

文章目录 挑战和目标AWS WAF的优势AWS WAF的不足我是怎么做的?什么是比较好的AWS WAF设计? 笔者为了解决公司Web站点防御性问题&#xff0c;较为深入的研究AWS WAF的相关规则。面对上千万的冲突&#xff0c;笔者不得设计出一种能漂亮处理冲突数据WAF规则。 AWS WAF开发人员在…

火山引擎ByteHouse:一套方案,让OLAP引擎在精准投放场景更高效

由于流量红利逐渐消退&#xff0c;越来越多的广告企业和从业者开始探索精细化营销的新路径&#xff0c;取代以往的全流量、粗放式的广告轰炸。精细化营销意味着要在数以亿计的人群中优选出那些最具潜力的目标受众&#xff0c;这无疑对提供基础引擎支持的数据仓库能力&#xff0…

CloudQuery实战 | 谁说没有一款一体化数据库操作管控云平台了?

文章目录 CloudQuery询盾的地址CloudQuery主页统一入口数据库归纳SQL编辑器权限管控审计中心数据保护数据变更 CloudQuery文档中心了解CloudQuery快速入门安装步骤社区版v2.1.0操作手册1数据查询更新日志 CloudQuery社区和活动 CloudQuery线上实战线上实战主页面展示及数据操作…

LLaMA-7B微调记录

Alpaca&#xff08;https://github.com/tatsu-lab/stanford_alpaca&#xff09;在70亿参数的LLaMA-7B上进行微调&#xff0c;通过52k指令数据&#xff08;https://github.com/tatsu-lab/stanford_alpaca/blob/main/alpaca_data.json&#xff09;&#xff0c;在8个80GB A100上训…

5.5.webrtc的线程管理

今天呢&#xff0c;我们来介绍一下线程的管理与绑定&#xff0c;首先我们来看一下web rtc中的线程管理类&#xff0c;也就是thread manager。对于这个类来说呢&#xff0c;其实实现非常简单&#xff0c;对吧&#xff1f; 包括了几个重要的成员&#xff0c;第一个成员呢就是ins…

拥塞控制(TCP限制窗口大小的机制)

拥塞控制机制可以使滑动窗口在保证可靠性的前提下&#xff0c;提高传输效率 关于滑动窗口的属性以及部分机制推荐看TCP中窗口和滑动窗口的含义以及流量控制 拥塞控制出现的原因 看了上面推荐的博客我们已经知道了&#xff0c;由于接收方接收数据的能力有限&#xff0c;所以要通…