作为 Web 开发人员,我们过去常常为我们的应用程序寻找合适的托管服务,但同时也面临着部署和维护这些应用程序的所有复杂问题。但现在,我们生活在一个新时代,云提供商几乎可以免费为我们制造很多东西。对于 .NET 开发人员来说,Microsoft Azure 看起来是托管 Web 应用程序的最自然选择。
Docker 是另一项技术,它可以从运行应用程序的平台和环境中进行抽象。
在本文中,我将详细介绍如何创建简单的 ASP.NET Core Web 应用程序、使用应用程序创建 docker 映像以及将其部署到 Azure 的最简单方法。最后,您将很好地了解如何部署您的 Web 应用程序并使其可供全世界使用。
我将使用 JetBrains Rider 来实现本文的开发目的。但您可以使用任何您想要的工具。
首先,您需要创建一个新项目。我们称其为简单的“ webapp ”。
创建新项目后,它应该如下所示:
在项目没有任何变化的情况下,我们将专注于Dockerfile
。修改为如下示例:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 as base WORKDIR /app EXPOSE 8080 ENV ASPNETCORE_URLS http://+:8080 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build COPY . /src WORKDIR /src RUN dotnet build "webapp.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "webapp.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "webapp.dll"]
您需要注意EXPOSE 8080
和ENV ASPNETCORE_URLS http://+:8080
行,以便能够通过 HTTP 连接到 docker 容器。
从命令行构建 docker 映像。您需要导航到webapp
项目目录,并执行以下命令:
DOCKER_BUILDKIT=1 docker buildx build --platform linux/amd64 --tag drmoz/webapp:latest .
我在 Mac M1 上运行它,并且必须显式指定--platform
参数才能与 Azure 部署兼容。我还必须通过指定DOCKER_BUILDKIT=1
参数并使用buildx
来激活 Docker Buildkit,以便能够为其他架构构建映像。
如果您在 Intel x86/x64 平台上运行它,则可以使用docker build
命令,无需指定--platform
参数并激活buildx
。
您可以以不同的方式标记您的映像,但由于我要使用 Docker Hub,因此我必须指定我的帐户名: drmoz
作为映像标记drmoz/webapp:latest
一部分。
构建镜像后,您可以通过运行以下命令来检查它是否存在于 Docker 中:
docker images
它应该在列表中:
REPOSITORY TAG IMAGE ID CREATED SIZE drmoz/webapp latest 0cfac748256b 37 minutes ago 216MB
让我们运行 docker 容器来验证新创建的映像是否正常工作。执行docker run
命令启动容器:
docker run -p 5555:8080 drmoz/webapp:latest
指定-p
参数将容器内的8080
端口映射到本地机器的5555
端口。另外,指定用于创建容器的图像名称。就我而言,它是drmoz/webapp:latest
。
现在,您可以在浏览器中导航http://localhost:5555
以查看 ASP.NET Core Web App 主页。
我们需要将镜像推送到Docker Hub 。在此之前,您必须在 Docker 注册表上注册并创建一个存储库。单击主页右上角的“创建存储库”按钮。
指定Repository Name
字段,并保持存储库可见性Public
。
在命令行中,您必须登录 Docker Hub 注册表:
docker login
之后,您将能够将新创建的映像推送到注册表:
docker push drmoz/webapp:latest
导航到存储库,您将看到有关图像的信息:
现在,我们已准备好将 ASP.NET Core Web 应用程序部署到 Azure。让我们登录到Azure门户,并创建一个新的资源组。将资源组名称指定为“ webapp-rg ”,然后单击“查看+创建”按钮。
在下一个屏幕上,只需点击“创建”按钮即可。
现在,我们可以创建一个 Web 应用程序。导航到“创建资源”页面,然后找到 WebApp。单击“创建”按钮。
您需要指定我们之前创建的Resource Group
。另外,为 Web 应用程序指定一个唯一的Name
。在Publish
字段中选择“Docker 容器”。稍后,我们将能够指定要使用哪个 Docker 镜像。
在Pricing plans
部分中选择任何合适的选项,但我建议使用免费 F1轮胎进行测试。导航到 Docker 选项卡。
在此选项卡上,在Image Source
字段中选择“Docker Hub”。在“ Access Type
”字段中选择“公共”,并使用我们推送到 Docker Hub 的映像名称指定Image and tag
值。导航到“查看+创建”选项卡。在此选项卡上,单击“创建”按钮:
部署新资源时,系统会询问您是否要导航到该资源;去做就对了。您将能够看到有关 Web 应用程序的信息。
单击“浏览”按钮打开已部署的 Web 应用程序。如果一切顺利,您应该会看到 ASP.NET Core Web App 主页,类似于您通过导航http://localhost:5555
在浏览器中看到的主页。
如果您导航到“部署中心”设置并启用“继续部署”,则每次将新映像推送到 Docker Hub 时,您都可以重新部署映像。通过这种方式,您可以更改代码,使用新映像将其推送到 Docker Hub,并在几分钟内在 Azure 中查看更改。
为了能够查看部署日志并识别问题,您需要在“应用服务日志”一章下启用将日志保存到文件系统,如下所示:
完成后,您可以导航到“部署中心”并查看日志,如下所示:
如果您达到了这一点,您就成功创建了一个 ASP.NET Core Web 应用程序;将其打包到 Docker 映像,并将其部署到 Azure。如今,技术让生活变得更加轻松,并加快了发展进程。您可以看到如何轻松地将应用程序部署到云提供商并将其公开给全世界、执行一些测试并查看您的工作结果。
现在,您可以使用 Microsoft文档深入了解 Azure 云提供商的详细信息。另外,请查看 Docker文档以更深入地了解这项技术。我希望它可能有帮助。