Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何高效地从大型解决方案中构建多个docker映像?_Docker_Dockerfile - Fatal编程技术网

如何高效地从大型解决方案中构建多个docker映像?

如何高效地从大型解决方案中构建多个docker映像?,docker,dockerfile,Docker,Dockerfile,我有一个大型的.NET解决方案,并希望为几个应用程序项目高效地从中构建多个docker映像 第一个项目的Dockerfile如下所示: # Solution common build steps FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env WORKDIR /app COPY . . RUN setup-build-env.sh # Sets up additional NuGet feeds RUN dotnet restore Lin

我有一个大型的.NET解决方案,并希望为几个应用程序项目高效地从中构建多个docker映像

第一个项目的Dockerfile如下所示:

# Solution common build steps
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env
WORKDIR /app

COPY . .
RUN setup-build-env.sh # Sets up additional NuGet feeds
RUN dotnet restore Linux.slnf

# Project specific build steps
RUN cd src/Category1/src/Project1 && dotnet publish -c Release -o publish

FROM mcr.microsoft.com/dotnet/runtime:3.1 AS base
WORKDIR /app
COPY --from=build-env /app/src/Category1/src/Project1/publish .
ENTRYPOINT dotnet Project1.dll
每个项目映像的运行dotnet restore Linux.slnf之前的部分都是相同的

我最担心的是大的(~400MB)
COPY似乎每次构建此Dockerfile时都需要重复的操作

每个要转换为容器的应用程序项目都引用解决方案中的多个项目,因此仅复制有问题的单个项目将不起作用


如何从我的大型解决方案高效地构建多个应用程序项目映像?

使用公共部分构建自定义映像

共同形象
docker build-t common.image:1.0.

项目形象 显然,如果解决方案发生更改,则必须重建公共映像

如果所有项目都具有相同的Dockerfile(仅更改名称),则可以使用

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

COPY . .
RUN setup-build-env.sh # Sets up additional NuGet feeds
RUN dotnet restore Linux.slnf
FROM common.image:1.0
RUN cd src/Category1/src/Project1 && dotnet publish -c Release -o publish

FROM mcr.microsoft.com/dotnet/runtime:3.1 AS base
WORKDIR /app
COPY --from=build-env /app/src/Category1/src/Project1/publish .
ENTRYPOINT dotnet Project1.dll