.net 如何让Docker重用常用的dotnet dll?

e0bqpujr  于 2023-01-03  发布在  .NET
关注(0)|答案(1)|浏览(123)

我们的情况:

我们正在创建一个基于微服务的应用程序,它由许多. NETDocker容器(ASP .NETCore)组成,当然这些容器都有一个非常大的公共DLL集,大小大约为8 MB。
问题是,基本层是共享的,并缓存在客户端设备上,当然,但我们希望从中挤出更高的效率(因为1000个客户端x 20个服务x 8 MB仍然是160 GB的下载,其中大部分可以避免!)。

到目前为止,我尝试过

1.我为服务创建了一个dockerfile,它的作用如下:

copy --from xyz.example.com/common-libraries /app /app

copy /publish /app

1.我试着用它来建造码头集装箱
1.现在的结果是,我从“common-libraries”下载了8 MB的层,但又从实际构建中下载了所有8 MB的层,即使文件是相同的(即使使用sha 256 sum和ls -l检查,也都是相同的)
1.还尝试了COPY --link --from... etc...,但这只告诉我“LLB对--link一无所知”

我们的帮助请求:

有没有什么方法可以为dotnetdocker容器中的许多dll文件(其中一些文件很大)创建一个额外的层?这对环境也很好,因为我们都知道大量下载也会产生二氧化碳压力。

az31mfrm

az31mfrm1#

你可以创建一个自定义的图像作为你的图像的基础。

FROM mcr.microsoft.com/dotnet/aspnet:6.0
copy --from xyz.example.com/common-libraries /app /app

然后使用

docker build -t custom-aspnet:6.0 .

然后将其用作其他图像的基础,方法是

FROM custom-aspnet:6.0

而不是FROM mcr.microsoft.com/dotnet/aspnet:6.0
您还应该将基础映像推送到映像存储库中,以供其他开发人员使用。

相关问题