Visual Studio for Mac 中的 Docker 入门

重要

根据 Microsoft 的新式生命周期策略,Visual Studio for Mac 计划会于 2024 年 8 月 31 日停用。 虽然你可以继续使用 Visual Studio for Mac,但 Mac 上的开发人员还可以使用其他几个选项,例如适用于 VS Code 的新 C# 开发工具包扩展的预览版本。

在此博客文章中详细了解支持时间线和替代方案

使用 Visual Studio for Mac,可以轻松地生成、调试和运行容器化 ASP.NET Core 应用并将其发布到 Azure。

先决条件

安装和设置

对于 Docker 安装,请查看并遵循安装适用于 Mac 的 Docker Desktop 中的信息。

创建 ASP.NET Core Web 应用程序并添加 Docker 支持

  1. 通过转到“文件”>“新建解决方案”来创建新解决方案。
  2. 在“.NET Core”>“应用”下,选择“Web 应用程序”模板:Create a new ASP.NET application
  3. 选择目标框架。 本示例将使用 .NET Core 2.2:Set target framework
  4. 输入项目详细信息,例如名称(在此示例中为 DockerDemo)。 创建的项目包含生成并运行 ASP.NET Core Web 站点所需的所有基础知识。
  5. 在“解决方案”窗口中,右键单击 DockerDemo 项目并选择“添加”>“添加 Docker 支持”:Add docker support

Visual Studio for Mac 自动将新项目添加到名为 docker-compose 的解决方案,并将 Dockerfile 添加到现有项目。

Generated docker support files

Dockerfile 概述

Dockerfile 是指用于创建最终 Docker 映像的方案。 请参阅 Dockerfile 引用,了解其中的命令。

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY DockerDemo/DockerDemo.csproj DockerDemo/
RUN dotnet restore "DockerDemo/DockerDemo.csproj"
COPY . .
WORKDIR "/src/DockerDemo"
RUN dotnet build "DockerDemo.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "DockerDemo.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DockerDemo.dll"]

前面的 Dockerfile 基于 microsoft/aspnetcore 映像,并包括通过构建项目并将其添加到容器中修改基本映像的说明 。

注意

Visual Studio for Mac 创建的默认 Dockerfile 公开端口 80 用于传输 HTTP 流量。 若要启用 HTTPS 流量,请将 Expose 443 添加到 Dockerfile。

调试

docker-compose 项目设置为启动项目并开始调试(“运行”>“开始调试”)。 这将在容器中生成、部署和启动 ASP.NET 项目。

提示

安装 Docker Desktop 后首次运行时,在尝试进行调试时可能会收到以下错误:Cannot start service dockerdemo: Mounts denied

/usr/local/share/dotnet/sdk/NuGetFallbackFolder 添加到 Docker Desktop 中的“文件共享”选项卡:

Adding the NuGetFallbackFolder folder to File Sharing

生成完成后,将在 Safari 中启动应用程序:

Default Docker project running in Safari

请注意,容器将侦听某个端口(例如 http://localhost:32768),此端口可能会有所不同。

若要查看正在运行的容器的列表,请在终端使用 docker ps 命令。

请注意以下屏幕截图中的端口中继(在 PORTS 下)。 这显示了该容器正在侦听我们在上面的 Safari 中看到的端口,并将请求中继到端口 80(在 Dockerfile 中定义)上的内部 Web 服务器。 从应用程序的角度来看,它正在侦听端口 80:

Docker container list