Dockerize一个ASP.NET Core应用程序
预计阅读时间:4分钟
介绍
本示例演示了如何通过dockerize ASP.NET Core应用程序。
为什么要构建ASP.NET Core?
- 开源的
- 在Windows,MacOS和Linux上跨平台开发和运行ASP.NET Core应用
- 非常适合现代基于云的应用程序,例如Web应用程序,IoT应用程序和移动后端
- ASP.NET Core应用程序可以在.NET Core 或完整的.NET Framework上运行
- 旨在为部署到云或本地运行的应用程序提供优化的开发框架
- 模块化组件以最小的开销保留了构建解决方案时的灵活性
先决条件
本示例假定您的计算机上已经有一个ASP.NET Core应用程序。如果您不熟悉ASP.NET,则可以按照一个 简单的教程来初始化项目或克隆我们的ASP.NET Docker Sample。
为ASP.NET Core应用程序创建Dockerfile
方法1:
Dockerfile
在您的项目文件夹中创建一个。- 将以下文本添加到您
Dockerfile
的Linux或 Windows容器中。下面的标签是多体系结构的,这意味着它们会根据Docker Desktop for Windows中设置的模式拉入Windows或Linux容器 。阅读有关切换容器的更多信息 。 - 该
Dockerfile
假定您的应用程序叫做aspnetapp
。更改Dockerfile
为使用项目的DLL文件。
# syntax=docker/dockerfile:1
FROM mcr.microsoft.com/dotnet/sdk:5.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:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
- 要使构建上下文尽可能小
,请在项目文件夹中添加一个
.dockerignore
文件,然后将以下内容复制到其中。
bin/
obj/
方法2(在Docker容器外部构建应用):
Dockerfile
在您的项目文件夹中创建一个。- 将以下文本添加到您
Dockerfile
的Linux或 Windows容器中。下面的标签是多体系结构的,这意味着它们会根据Docker Desktop for Windows中设置的模式拉入Windows或Linux容器 。阅读有关切换容器的更多信息 。 -
该
Dockerfile
假定您的应用程序叫做aspnetapp
。更改Dockerfile
为使用项目的DLL文件。此方法假定您的项目已经构建,并且从publish文件夹复制了构建工件。请参阅有关对.Net Core应用程序进行容器化的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
文件。
构建并运行Docker映像
- 打开命令提示符,然后导航到您的项目文件夹。
- 使用以下命令来构建和运行您的Docker映像:
$ docker build -t aspnetapp .
$ docker run -d -p 8080:80 --name myapp aspnetapp
查看从容器运行的网页
- 转到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
)
- 跑步