簡體   English   中英

asp.net core 2.0 - 多項目解決方案 docker 文件

[英]asp.net core 2.0 - multiple projects solution docker file

[asp.net core 2.0 和 docker for linux]

我對 docker 完全陌生,並試圖弄清楚如何在我有 2 個項目的解決方案的情況下使用 docker。 我見過的所有教程都顯示了單個項目。

因此,如果有人可以逐步展示解決方案,我將不勝感激。

我有一個解決方案結構,如:

Solution.sln
|______WebAPIProject.csproj
|______ClassLibraryProject.csproj

在 Visual Studio 中,我為解決方案添加了 docker 支持並獲得了這些文件:

在 WebAPIProject 下,它創建了這個Docker 文件

FROM microsoft/aspnetcore:2.0
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "WebAPIProject.dll"]

然后,在單獨的 docker-compose“項目”下,我得到了:

docker-compose.ci.build.yml

version: '3'

services:
  ci-build:
    image: microsoft/aspnetcore-build:1.0-2.0
    volumes:
      - .:/src
    working_dir: /src
    command: /bin/bash -c "dotnet restore ./Solution.sln && dotnet publish ./Solution.sln -c Release -o ./obj/Docker/publish"

docker.compose.yml文件

version: '3'

services:
  WebAPIProject:
    image: WebAPIProject
    build:
      context: ./WebAPIProject
      dockerfile: Dockerfile

我敢肯定它的路徑微不足道,但我對這一切都感到很迷茫,所以如果有人能對它有所了解嗎?

我終於找到了一種如何使用docker構建解決方案的方法。

重要信息:為此,您必須將Dockerfile文件放在解決方案文件所在的位置

我剛剛創建了一個包含以下內容的docker文件:

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

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY Solution.sln ./
COPY ClassLibraryProject/*.csproj ./ClassLibraryProject/
COPY WebAPIProject/*.csproj ./WebAPIProject/

RUN dotnet restore
COPY . .
WORKDIR /src/ClassLibraryProject
RUN dotnet build -c Release -o /app

WORKDIR /src/WebAPIProject
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", "WebAPIProject.dll"]

請注意,我認為您可能必須尊重項目構建依賴項,但我真的不知道。

示例調用構建:

sudo docker build --no-cache -t webapi:dev .

要運行的示例調用:

sudo docker run -d=false -p 8080:80 --name webapi webapi:dev

希望有所幫助。

雖然我知道dotnet核心不是特定於Windows並且不是每個人都會使用Visual Studio,但微軟已將這一功能包含在Visual Studio中(2017年試用)。

  1. 右鍵單擊Web項目。
  2. 選擇添加。
  3. 然后“Docker支持”。 這將自動將多個項目提取到容器中。

如果您有多個Web項目,請分別為每個項目重復該步驟。

以下是參考: https//docs.microsoft.com/en-us/aspnet/core/host-and-deploy/docker/visual-studio-tools-for-docker?view=aspnetcore-2.1#existing-app

如果您在運行Docker容器時碰巧遇到任何問題,請嘗試在“Windows功能”(在“開始”菜單中搜索Windows Features中取消選擇Hyper-V Services ,再次選擇,然后重新啟動計算機。 點擊這里

在此輸入圖像描述

這鏈接到一篇關於如何解決這個問題的驚人帖子

他提到將所有代碼放在src目錄中。 我不是這樣,這是我提出的文件:(關鍵是for file部分。我確定它不是最好的dockerfile否則;提示是受歡迎的。)

FROM microsoft/dotnet:2.2-aspnetcore-runtime-stretch-slim AS base
WORKDIR /app
EXPOSE 5000

FROM microsoft/dotnet:2.2-sdk-stretch AS build
WORKDIR /src

COPY ./*.sln ./

COPY */*.csproj ./
RUN for file in $(ls *.csproj); do mkdir -p ${file%.*} && mv $file ${file%.*}; done
RUN dotnet restore

COPY . ./
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 .

ENV ASPNETCORE_URLS="http://*:5000"
ENTRYPOINT ["dotnet", "PersonalSiteApi.dll"]

我有同樣的問題,所有其他解決方案都不適合我,所以我自己制定了。 我覺得下面的步驟很清晰,但是如果你是Docker的新手,我會在專門討論新Docker用戶的博客文章中逐行解釋它(這樣你就可以准確理解這個Dockerfile中發生了什么)。

  1. Dockerfile保存在項目目錄中 (在我看來,這比將其保留在解決方案文件旁邊要好,因為每個解決方案可以有多個Docker鏡像)。

  2. 配置Dockerfile如下:

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app

COPY . ./
RUN dotnet publish PROJECT_NAME -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app/PROJECT_NAME/out .

ENTRYPOINT ["dotnet", "PROJECT_NAME.dll"]
  1. .dockerignore文件移動到解決方案目錄 - 這是必需的,因為Docker CLI 僅從構建上下文的根目錄獲取.dockerignore文件(如文檔所述 ),但它也很方便,因為您對所有項目都有一組通用的忽略規則(類似於.gitignore文件),更容易維護。

  2. 從解決方案目錄運行build命令 ,指向項目目錄中的Dockerfile ,並將當前目錄( )設置為構建上下文(以訪問所有項目):

docker build -f PROJECT_DIRECTORY/Dockerfile -t IMAGE_NAME .
  1. 像往常一樣運行容器,例如:
docker run -d -p 8080:80 --name my-app-name IMAGE_NAME
FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app

RUN mkdir /output

# Copy project and publish

COPY . /app

WORKDIR /app/YourProjectName
RUN dotnet publish --configuration Debug --output /output

# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime

ENV ASPNETCORE_URLS http://*:5001

WORKDIR /app

COPY --from=build-env /output .
EXPOSE 5001

ENTRYPOINT ["dotnet", "YourProjectName.dll"]

這是一個適合我的Docker配置。 這是一個ASP.NET Core 2 WebApi項目,包含許多子項目引用。

Then run it using  docker run -d -p 8080:5001 --name some-name yourpojectname

希望這有助於某人。

截至 2022 年 docker-compose 3.9

經過幾次嘗試,我設法這樣做:

項目層次:

MoulaTracker/
|- MoulaTracker.Core/    # <- PROJECT 1
|- MoulaTracker.Api/     # <- PROJECT 2
|- Dockerfile.Core
|- Dockerfile.Api
|- docker-compose.yml
|- MoulaTracker.sln

MoulaTracker.Api項目依賴於MoulaTracker.Core

docker-compose.yml

version: "3.9"

services:
  moula-tracker-core:
    build:
      context: .
      dockerfile: ./Dockerfile.Core
  moula-tracker-api:
    build:
      context: .
      dockerfile: ./Dockerfile.Api

Dockerfile.Api

FROM mcr.microsoft.com/dotnet/core/sdk:3.1.409 AS build-env

# Copy csproj and restore as distinct layers
WORKDIR /MoulaTracker.Api
COPY ./MoulaTracker.Api .
COPY ./MoulaTracker.Core ../MoulaTracker.Core
RUN dotnet restore

RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1.0 AS runtime

WORKDIR /MoulaTracker.Api
COPY --from=build-env /MoulaTracker.Api/ ./

ENTRYPOINT ["dotnet", "out/MoulaTracker.Api.dll"]
  1. 以管理員身份安裝docker桌面
  2. 以管理員身份運行Docker桌面
  3. 將您的 sln 文件移動到項目文件夾(在代碼文件夾內)
  4. 右鍵單擊項目 go 添加選項 -> Docker 支持和 select linux 作為操作系統,然后單擊確定
  5. 它將生成 DockerFile
  6. 將 DockerFile 移動到項目文件夾(在代碼文件夾內)包括 sln 文件級別
  7. 以管理員身份打開 cmd 和 go 到 DockerFile 路徑級別
  8. 運行這個 --> docker build -t imagename.
  9. 創建圖像文件后
  10. 運行這個 --> docker run -d -p 8080:83 --name dockercontainername imagename
  11. 在容器中運行的鏡像

暫無
暫無

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

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