如何dockerize ASP.NET Core 2.0应用程序?
我有一个简单的ASP.NET Core 2.0应用程序,在解决方案中有两个项目。一个项目是一个类库(WorldLibrary.dll),它由Web应用程序(WeatherWeb.dll)引用。如何dockerize ASP.NET Core 2.0应用程序?
我试图在这里遵循的步骤:
https://docs.docker.com/engine/examples/dotnetcore/
这是我Dockerfile:
FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "WeatherWeb.dll"]
但是,有与引用的.dll文件的问题。我得到下面的输出从“泊坞窗构建”命令:
C:\Users\olavt\source\repos\Weather\WeatherWeb>docker build -t weather .
Sending build context to Docker daemon 6.398MB
Step 1/10 : FROM microsoft/aspnetcore-build:2.0 AS build-env
---> df4c9af52c86
Step 2/10 : WORKDIR /app
---> Using cache
---> ae9d1b099da7
Step 3/10 : COPY *.csproj ./
---> Using cache
---> 2d9f3fba6470
Step 4/10 : RUN dotnet restore
---> Using cache
---> 19af5fb355a3
Step 5/10 : COPY . ./
---> 1704520a3ced
Step 6/10 : RUN dotnet publish -c Release -o out
---> Running in 7bcdf847e4dc
/usr/share/dotnet/sdk/2.0.2/NuGet.targets(792,5): warning MSB3202: The project file "/WorldLibrary/WorldLibrary.csproj" was not found. [/app/WeatherWeb.csproj]
Microsoft (R) Build Engine version 15.4.8.50001 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
/usr/share/dotnet/sdk/2.0.2/Microsoft.Common.CurrentVersion.targets(1768,5): warning : The referenced project '../WorldLibrary/WorldLibrary.csproj' does not exist. [/app/WeatherWeb.csproj]
Controllers/Api/WeatherController.cs(6,7): error CS0246: The type or namespace name 'WorldLibrary' could not be found (are you missing a using directive or an assembly reference?) [/app/WeatherWeb.csproj]
Controllers/WeatherController.cs(6,7): error CS0246: The type or namespace name 'WorldLibrary' could not be found (are you missing a using directive or an assembly reference?) [/app/WeatherWeb.csproj]
Controllers/Api/WeatherController.cs(14,39): error CS0246: The type or namespace name 'Weather' could not be found (are you missing a using directive or an assembly reference?) [/app/WeatherWeb.csproj]
The command '/bin/sh -c dotnet publish -c Release -o out' returned a non-zero code: 1
C:\Users\olavt\source\repos\Weather\WeatherWeb>
应该如何正确我得到引用的.dll文件复制是否正确?
如果是相关项目,您必须针对解决方案文件运行dotnet restore
和dotnet publish
,并将docker文件置于解决方案级别,以便可以从中访问所有项目。
基本上你需要在泊坞窗文件是唯一的变化:
COPY *.sln ./
COPY ./your_proj1_folder/*.csproj ./your_proj1_folder/
COPY ./your_proj2_folder/*.csproj ./your_proj2_folder/
RUN dotnet restore
的ASP.NET核心项目模板包含一个选项,提供了针对Linux或Windows容器的选项添加泊坞支持。
即使你创建一个没有泊坞支持的核心ASP.NET Web应用程序,您可以将其从Project > Docker Support
菜单
生成Dockerfile
执行定义基本图像添加到现有的项目,则执行该DOTNET恢复,建设,发布步骤并创建运行Web应用程序的最终图像:
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY *.sln ./
COPY WebApplication1/WebApplication1.csproj WebApplication1/
RUN dotnet restore
COPY . .
WORKDIR /src/WebApplication1
RUN dotnet build -c Release -o /app
FROM build AS publish
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]
它还生成一个docker-compose.yml
文件,该文件描述了imagesyou希望部署。在这种情况下,我已经添加了两个网络应用程序。第一个是使用Docker支持创建的。在第二个,之后增加了Docker支持。 docker-compose.yml
文件包括两个:
version: '3'
services:
webapplication1:
image: webapplication1
build:
context: .
dockerfile: WebApplication1\Dockerfile
webapplication2:
image: webapplication2
build:
context: .
dockerfile: WebApplication2\Dockerfile
哇,非常感谢。正是我需要的! –
项目模板*已经*包含添加docker支持的选项。您是否尝试过 –
您还可以通过'Project'调整码头,Docker支持' –