Dockerize dotnet core 2.2应用程序,在nopCommerce Dockerfile中放置了哪些行以及为什么行?

问题描述 投票:1回答:1

关于将dotnet核心应用程序码头化的问题

作为示例,我将为nopCommercew提供Dockerfile。https://github.com/nopSolutions/nopCommerce/blob/develop/Dockerfile

除了以下内容,其他所有内容都很清楚:

RUN dotnet publish Nop.Web.csproj -c Release -o /app/published
...
# add globalization support
RUN apk add --no-cache icu-libs
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

WORKDIR /app        
RUN mkdir bin
RUN mkdir logs  

COPY --from=build /app/published .
  1. 为什么要将应用发布到/app/published,然后将其复制到/app
  2. 为什么在行--from=build中使用COPY --from=build /app/published .
  3. RUN apk add --no-cache icu-libs这行是做什么用的?以及为什么要使用它?

谢谢!

docker .net-core devops nopcommerce
1个回答
1
投票
Docker映像是一堆较小的层。

docker build .在每个逻辑步骤创建多个小型docker映像并将其缓存。仔细检查docker build输出,并在输出中查找Using cache

检查]的输出>

docker pull mcr.microsoft.com/dotnet/core/runtime:3.1 docker images docker inspect <image id of mcr.microsoft.com/dotnet/core/runtime:3.1>

enter image description hereenter image description hereenter image description hereenter image description here

答案

有两个FROM docker命令。第一个命令指向.NET Core SDK,可能约为600 MB。

第二个命令指向.NET Core runtime,它可能是200 MB。

SDK映像供开发人员构建/测试/打包。它支持此处提供所有dotnet CLI命令。例如dotnet builddotnet publish

运行时映像针对生产进行了优化。它们较小,因此速度更快。

为了获得有效的构建过程,码头工人建议使用多个图像。 SDK和运行时。

1:为什么将应用发布到/ app / published,然后将其复制到/ app?

dotnet publish命令属于SDK映像周期。 /app/publish具有运行您的应用程序所需的所有功能,但位于SDK映像上。

我们需要将此作为运行时映像。

WORKDIR / app在运行时映像中创建一个文件夹。

2:为什么在COPY行中使用--from = build --from = build / app / published。?

在上述步骤之后,可以在/ app / publish文件夹中的SDK docker映像上使用publish命令的输出。

我们通过在命令末尾传递AS build在Dockerfile的第一行将其称为“构建”

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build

使用--from==build,我们指向SDK映像并将其复制到运行时映像。这是用于两个docker映像之间的通信。

3:这行RUN apk add --no-cache icu-libs是做什么用的?以及为什么要使用它?

apk用于在Linux OS上安装软件包。认为它等同于.net的nuget。

[icu-libs是用于Unicode字符的Linux软件包。

https://pkgs.alpinelinux.org/package/v3.3/main/x86/icu-libs我假设nopCommerce支持Unicode字符。mcr.microsoft.com/dotnet/core/runtime:3.1安装了可能不支持Unicode的Debian Linux版本4。通过APK命令nopCommerce正在手动安装它。

希望这可以解释您的所有问题。

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