asp.net core 2.0 - 多个项目解决方案docker文件

问题描述 投票:13回答:4

[asp.net核心2.0和linux的docker]

我对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'项目'下,我得到了:

泊坞窗,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 asp.net-core
4个回答
13
投票

我终于找到了一种如何使用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

希望有所帮助。


12
投票

虽然我知道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功能”(在“开始”菜单中搜索Hyper-V Services)中取消选择Windows Features,再次选择,然后重新启动计算机。检查here

enter image description here


2
投票

这链接到an amazing post关于如何解决这个问题。

他提到将所有代码放在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"]

1
投票
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

希望这有助于某人。

© www.soinside.com 2019 - 2024. All rights reserved.