Dockerize dotnet core 2.2 应用程序,什么以及为什么行放在 nopCommerce Dockerfile 中?
Dockerize dotnet core 2.2 app, what and why lines are placed in nopCommerce Dockerfile?
关于 dockerizing dotnet core app 的问题
作为示例,我将为 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 .
- 为什么要将应用发布到
/app/published
,然后将其复制到 /app
?
- 为什么
--from=build
行用在第COPY --from=build /app/published .
行?
- 这条线
RUN apk add --no-cache icu-libs
是做什么用的?为什么要使用它?
Docker 图像是一堆较小的图层。
docker build .
在每个逻辑步骤创建多个小 docker 图像并将其缓存。仔细检查 docker 生成输出并在输出中查找 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>
#答案
有两个 FROM
docker 命令。
第一个命令指向 .NET Core SDK
,可能是 600 MB。
第二个命令指向 .NET Core runtime
,大概是 200 MB。
SDK 映像供开发人员使用 build/test/package。它支持所有 dotnet
CLI 命令,可在此处获得。比如dotnet build
和dotnet publish
.
运行时图像针对生产进行了优化。它们更小,因此更快。
为了高效的构建过程,docker 建议使用多个图像。 SDK 和 运行时间。
###1:为什么要把app发布到/app/published,然后复制到/app?
dotnet publish
指令为SDK镜像循环。 /app/publish
拥有 运行 您的应用程序所需的一切,但在 SDK 映像上。
我们需要把它带到 运行 时间图像。
WORKDIR /app 在 运行time 图像中创建一个文件夹。
###2: 为什么在 COPY --from=build /app/published .?
行中使用 --from=build
在上述步骤之后,发布命令的输出在 /app/publish 文件夹中的 SDK docker 图像上可用。
我们通过在命令末尾传递 AS build
在 Docker 文件的第一行将其称为“构建”
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
与--from==build
我们指向SDK镜像并将其复制到运行time镜像。这是两个 docker 图像之间的通信。
###3: 这行 运行 apk add --no-cache icu-libs 是做什么用的?为什么要使用它?
apk 用于在 Linux OS 上安装软件包。认为它相当于.net的nuget。
icu-libs
是一个 Linux Unicode 字符包。
https://pkgs.alpinelinux.org/package/v3.3/main/x86/icu-libs
我假设 nopCommerce 支持 Unicode 字符。
mcr.microsoft.com/dotnet/core/runtime:3.1
安装 Debian Linux 可能是版本 4,它不支持 Unicode。
通过 APK 命令 nopCommerce 正在手动安装它。
关于 dockerizing dotnet core app 的问题
作为示例,我将为 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 .
- 为什么要将应用发布到
/app/published
,然后将其复制到/app
? - 为什么
--from=build
行用在第COPY --from=build /app/published .
行? - 这条线
RUN apk add --no-cache icu-libs
是做什么用的?为什么要使用它?
Docker 图像是一堆较小的图层。
docker build .
在每个逻辑步骤创建多个小 docker 图像并将其缓存。仔细检查 docker 生成输出并在输出中查找 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>
#答案
有两个 FROM
docker 命令。
第一个命令指向 .NET Core SDK
,可能是 600 MB。
第二个命令指向 .NET Core runtime
,大概是 200 MB。
SDK 映像供开发人员使用 build/test/package。它支持所有 dotnet
CLI 命令,可在此处获得。比如dotnet build
和dotnet publish
.
运行时图像针对生产进行了优化。它们更小,因此更快。
为了高效的构建过程,docker 建议使用多个图像。 SDK 和 运行时间。
###1:为什么要把app发布到/app/published,然后复制到/app?
dotnet publish
指令为SDK镜像循环。 /app/publish
拥有 运行 您的应用程序所需的一切,但在 SDK 映像上。
我们需要把它带到 运行 时间图像。
WORKDIR /app 在 运行time 图像中创建一个文件夹。
###2: 为什么在 COPY --from=build /app/published .?
行中使用 --from=build在上述步骤之后,发布命令的输出在 /app/publish 文件夹中的 SDK docker 图像上可用。
我们通过在命令末尾传递 AS build
在 Docker 文件的第一行将其称为“构建”
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
与--from==build
我们指向SDK镜像并将其复制到运行time镜像。这是两个 docker 图像之间的通信。
###3: 这行 运行 apk add --no-cache icu-libs 是做什么用的?为什么要使用它?
apk 用于在 Linux OS 上安装软件包。认为它相当于.net的nuget。
icu-libs
是一个 Linux Unicode 字符包。
https://pkgs.alpinelinux.org/package/v3.3/main/x86/icu-libs
我假设 nopCommerce 支持 Unicode 字符。
mcr.microsoft.com/dotnet/core/runtime:3.1
安装 Debian Linux 可能是版本 4,它不支持 Unicode。
通过 APK 命令 nopCommerce 正在手动安装它。