Dockerize an ASP.NET Core application
预计阅读时间:4分钟
Introduction
此示例演示如何对 ASP.NET Core 应用程序进行 docker 化.
Why build ASP.NET Core?
- Open-source
- 在 Windows、MacOS 和 Linux 上跨平台开发和运行 ASP.NET Core 应用程序
- 非常适合现代基于云的应用程序,例如 Web 应用程序、物联网应用程序和移动后端
- 旨在为部署到云或在本地运行的应用程序提供优化的开发框架
- 具有最小开销的模块化组件在构建您的解决方案时保持灵活性
Prerequisites
此示例假定您的计算机上已经有一个 ASP.NET Core 应用程序. 如果您是 ASP.NET 新手,您可以按照一个简单的教程来初始化项目或克隆我们的ASP.NET Docker 示例.
Create a Dockerfile for an ASP.NET Core application
Method 1:
- 在您的项目文件夹中创建一个
Dockerfile
. - 将以下文本添加到 Linux 或Windows 容器的
Dockerfile
中. 下面的标签是多架构的,这意味着它们会根据Docker Desktop for Windows中设置的模式来提取 Windows 或 Linux 容器. 阅读有关切换容器的更多信息. -
Dockerfile
假定您的应用程序名为aspnetapp
. 更改Dockerfile
以使用项目的 DLL 文件.
# syntax=docker/dockerfile:1
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY ../engine/examples ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
- 为了使您的构建上下文尽可能小,请将
.dockerignore
文件添加到您的项目文件夹并将以下内容复制到其中.
bin/
obj/
Method 2 (build app outside Docker container):
- 在您的项目文件夹中创建一个
Dockerfile
. - 将以下文本添加到 Linux 或Windows 容器的
Dockerfile
中. 下面的标签是多架构的,这意味着它们会根据Docker Desktop for Windows中设置的模式来提取 Windows 或 Linux 容器. 阅读有关切换容器的更多信息. -
Dockerfile
假定您的应用程序名为aspnetapp
. 更改Dockerfile
以使用项目的 DLL 文件. 此方法假定您的项目已经构建并且它从发布文件夹复制构建工件. 请参阅有关Containerize a .Net Core app的 Microsoft 文档.此处的
docker build
步骤将比方法 1 快得多,因为所有工件都是在docker build
步骤之外构建的,并且与构建基础镜像相比,基础镜像的大小要小得多.这种方法是 Jenkins、Azure DevOps、GitLab CI 等 CI 工具的首选,因为如果 Docker 不是唯一使用的部署模型,您可以在多个部署模型中使用相同的工件. 此外,您将能够运行单元测试并发布代码覆盖率报告,或在 CI 构建的工件上使用自定义插件.
# syntax=docker/dockerfile:1 FROM mcr.microsoft.com/dotnet/aspnet:5.0 COPY bin/Release/netcoreapp3.1/publish/ App/ WORKDIR /App ENTRYPOINT ["dotnet", "aspnetapp.dll"]
- 为了使您的构建上下文尽可能小,请将
.dockerignore
文件添加到您的项目文件夹中.
Build and run the Docker image
- 打开命令提示符并导航到您的项目文件夹.
- 使用以下命令构建和运行 Docker 映像:
$ docker build -t aspnetapp .
$ docker run -d -p 8080:80 --name myapp aspnetapp
View the web page running from a container
- 转到localhost:8080以在 Web 浏览器中访问您的应用程序.
- 如果您使用的是 Nano Windows 容器并且尚未更新到 Windows Creator 更新,则存在影响Windows 10 如何通过"NAT"(网络地址转换)与容器对话的错误. 你必须直接打容器的IP. 您可以通过以下步骤获取容器的 IP 地址:
- 运行
docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" myapp
- 复制容器 IP 地址并粘贴到浏览器中. (例如,
172.16.240.197
)
- 运行
Further reading
- ASP.NET 核心
- Docker Hub 上的 Microsoft ASP.NET Core
- 为 ASP.NET Core 构建 Docker 映像
- Visual Studio 的 Docker 工具