簡體   English   中英

ASP.NET 5:使用多項目解決方案構建docker

[英]ASP.NET 5: docker build with multi-projects solution

我正在嘗試創建一個由4個項目組成的ASP.NET 5解決方案的圖像。 這是結構:

  • FlashTools(ASP.NET 5類庫)
  • 模型(ASP.NET 5類庫)
  • QuizzCorrector(ASP.NET 5 Web應用程序)
  • QuizzService(ASP.NET 5類庫)

我有一個簡單的Dockerfile,如下所示:

FROM microsoft/aspnet

COPY . /app
WORKDIR /app
RUN ["kpm", "restore"]

EXPOSE 5004
ENTRYPOINT ["k", "kestrel"]

但不知道在哪里放。 在我的解決方案的根文件夾中,global.json是在我的Project.json所在的Web Application文件夾中? 當然我已根據此文件的位置對其進行了修改。

無論如何兩者似乎都有效,因為它在運行命令時下載了我需要的所有庫

docker build -t quizzcorrector。

我的問題是碼頭工人告訴我的那一刻

無法找到Models> = 1.0.0

無法找到FlashTools> = 1.0.0

無法找到QuizzService> = 1.0.0

我在這個帖子上看到https://github.com/aspnet/aspnet-docker/issues/19在多項目解決方案中我們應該運行命令“kpm pack”將我的應用打包成可部署和可運行的形式。

我找不到任何帶有kpm pack命令的Dockerfiles的例子,只有文檔: https//github.com/aspnet/Home/wiki/Package-Manager

我當然也嘗試在我的Dockerfile中使用ADDCOPY命令將我的項目內容復制到容器的文件系統中,但仍然是同樣的錯誤。

謝謝你的幫助

更新時間:2018年2月14日

我之前的回答沒有考慮編寫Dockerfile的最佳實踐。 它也不適用於那些具有多個Web項目的解決方案,其中每個應用程序必須在單獨的Docker容器中運行。 更好的方法是在開發環境中構建和發布ASP.NET Core應用程序,並在Docker容器中運行應用程序,該容器已針對生產使用進行了優化。

  1. 在Web應用程序文件夾中創建Dockerfile
  2. 將以下內容放入其中

     FROM microsoft/aspnetcore COPY ./publish /publish WORKDIR /publish EXPOSE 5000/tcp ENTRYPOINT ["dotnet", "QuizzCorrector.dll"] 
  3. 通過運行dotnet publish -c Release -o publish構建和發布項目
  4. 通過運行docker build -t QuizzCorrector構建Docker鏡像

請注意, microsoft/aspnetcore Docker映像是僅運行時映像,它不提供.NET Core SDK,使其更輕,更適合生產使用。


可能會遲到,但我會為那些仍在努力讓它發揮作用的人回答這個問題。 您需要在解決方案級別創建Dockerfile。 然后,您需要更新您的工作文件夾以使用您的Web項目所在的文件夾。 這是在最終的Dockerfile下面,考慮到kpmk utilites被一個dotnet工具替換。

 FROM microsoft/dotnet:latest COPY . /app WORKDIR /app/src/QuizzCorrector RUN ["dotnet", "restore"] EXPOSE 5004 ENTRYPOINT ["dotnet", "run"] 

對於未來參考和任何具有相同問題的人。 微軟發布了搬運工集裝箱DOTNET架構/ eShopOnContainers項目A樣品dotnet的核心應用在這里

您可以參考鏈接或查找下面的示例

示例:

FROM microsoft/aspnetcore:2.0.3 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY . .
RUN dotnet restore -nowarn:msb3202,nu1503
WORKDIR /src/src/Services/Basket/Basket.API
RUN dotnet build --no-restore -c Release -o /app

FROM build AS publish
RUN dotnet publish --no-restore -c Release -o /app

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

為了能夠使用ASP.NET CORE 1.0在DockerHub中構建和運行多個xproject,我遇到了類似的問題。 這導致我在這里幫助了我。 我的解決方案是:

解決方案結構

```

Root
│   AuthenticationService.sln
│   Dockerfile    
│
└───src
│   │
│   └───AuthenticationService
│   └───DataAccess
│   └───EntityDataModels
│   └───Services
.

Dockerfile:

FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app/src/AuthenticationService
RUN ["dotnet", "restore"]

WORKDIR /app/src/DataAccess
RUN ["dotnet", "restore"]

WORKDIR /app/src/EntityDataModels
RUN ["dotnet", "restore"]

WORKDIR /app/src/Services
RUN ["dotnet", "restore"]

WORKDIR /app/src/AuthenticationService
RUN ["dotnet", "build"]

EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000

ENTRYPOINT ["dotnet", "run"]

對於這個答案,也許不遲。

在這篇文章http://dev.widemeadows.de/2015/09/08/fun-with-asp-net-5-beta7-bliss-build-errors-dockerfiles-and-reverse-proxies/你要做的解決方案的文件,並通過引用起始項目引用所有項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM