带有2个可执行项目的Dockerize.NET解决方案
我被要求用一个web api和一个控制台程序创建一个.net解决方案,然后用一个docker compose命令提供这个解决方案,该命令包含完整的环境。web api使用mongodb和easynetq。控制台程序引用web api项目,并使用easynetq。我知道Visual Studio可以为每个项目提供dockerfile。在这之后我该怎么做?我是否在解决方案级别将2个DockerFile合并为1个?或者我可以继续使用2个dockerfiles吗 控制台程序的Dockerfile带有2个可执行项目的Dockerize.NET解决方案,docker,asp.net-core,asp.net-web-api,docker-compose,dockerfile,Docker,Asp.net Core,Asp.net Web Api,Docker Compose,Dockerfile,我被要求用一个web api和一个控制台程序创建一个.net解决方案,然后用一个docker compose命令提供这个解决方案,该命令包含完整的环境。web api使用mongodb和easynetq。控制台程序引用web api项目,并使用easynetq。我知道Visual Studio可以为每个项目提供dockerfile。在这之后我该怎么做?我是否在解决方案级别将2个DockerFile合并为1个?或者我可以继续使用2个dockerfiles吗 控制台程序的Dockerfile FRO
FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app
COPY . ./
RUN dotnet restore "./ConsoleProgram.csproj"
RUN dotnet publish "ConsoleProgram.csproj" -c Release -o out
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "ConsoleProgram.dll"]
webapi的Dockerfile与上述相同,仅更改名称
解决方案级别的Docker compose
version: '3'
services:
mongo:
image: mongo
restart: always
ports:
- 27017:27017
webapi:
build: ./webapi
restart: always
ports:
- 5000:80
environment:
MongoDB__Host: mongo
depends_on:
- mongo
console:
build: ./console
restart: always
depends_on:
- webapi
在此基础上进行docker撰写后,我发现以下错误:
正在跳过项目“C:\WebApi\WebApi.csproj”,因为找不到该项目。
引用的项目“..\WebApi\WebApi.csproj”不存在。
无法生成服务“控制台”:命令“cmd/S/C dotnet”
publish“Console.csproj”-c Release-o out”返回一个非零代码:
一,
你走对了路。每个项目都应该有Dockerfile(在项目文件夹的根目录中),然后是一个docker-compose.yaml文件和多个docker-compose.override.yaml文件(如果需要) Dockerfile中存在一些漏洞 1.不要复制
复制/代码>控制台程序映像中的所有文件,首先只需复制csproj
COPY console/ConsoleProgram.csproj console/
2.复制csproj文件后,运行dotnet restore
,以缩短映像构建时间
RUN dotnet restore console/ConsoleProgram.csproj
3.然后复制所有其他文件并运行dotnet publish
(或build
)并标记--无恢复
COPY console/ console/
RUN dotnet publish console/ConsoleProgram.csproj --no-restore -c Release -o /out
下面是Dockerfile的外观示例
FROM microsoft/dotnet:2.2-sdk AS publish
WORKDIR /src
COPY console/ConsoleProgram.csproj console/
RUN dotnet restore console/ConsoleProgram.csproj
COPY console/ console/
RUN dotnet publish console/ConsoleProgram.csproj --no-restore -c Release -o /app
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS runtime
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ConsoleProgram.dll"]
WebAPI也应该有类似的功能。现在看看你的docker-compose.yaml。您应该指定生成上下文和图像名称
webapi:
image: 'webapi'
build:
context: .
dockerfile: ./webapi/Dockerfile
restart: always
ports:
- 5000:80
environment:
MongoDB__Host: mongo
depends_on:
- mongo
console:
image: 'console'
build:
context: .
dockerfile: ./console/Dockerfile
restart: always
depends_on:
- webapi
因为我不知道你的项目结构,所以你需要小心这个答案中的所有项目路径。每个项目都应该有Dockerfile(在项目文件夹的根目录中),然后是一个docker-compose.yaml文件和多个docker-compose.override.yaml文件(如果需要)
Dockerfile中存在一些漏洞
1.不要复制复制/代码>控制台程序映像中的所有文件,首先只需复制csproj
COPY console/ConsoleProgram.csproj console/
2.复制csproj文件后,运行dotnet restore
,以缩短映像构建时间
RUN dotnet restore console/ConsoleProgram.csproj
3.然后复制所有其他文件并运行dotnet publish
(或build
)并标记--无恢复
COPY console/ console/
RUN dotnet publish console/ConsoleProgram.csproj --no-restore -c Release -o /out
下面是Dockerfile的外观示例
FROM microsoft/dotnet:2.2-sdk AS publish
WORKDIR /src
COPY console/ConsoleProgram.csproj console/
RUN dotnet restore console/ConsoleProgram.csproj
COPY console/ console/
RUN dotnet publish console/ConsoleProgram.csproj --no-restore -c Release -o /app
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS runtime
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ConsoleProgram.dll"]
WebAPI也应该有类似的功能。现在看看你的docker-compose.yaml。您应该指定生成上下文和图像名称
webapi:
image: 'webapi'
build:
context: .
dockerfile: ./webapi/Dockerfile
restart: always
ports:
- 5000:80
environment:
MongoDB__Host: mongo
depends_on:
- mongo
console:
image: 'console'
build:
context: .
dockerfile: ./console/Dockerfile
restart: always
depends_on:
- webapi
因为我不知道你们的项目结构,所以你们需要小心这个答案中的所有项目路径