Powershell Windows上Matlab编译器运行时的Docker构建(非交互式安装)

Powershell Windows上Matlab编译器运行时的Docker构建(非交互式安装),powershell,docker,Powershell,Docker,我注意到Docker构建中的某些步骤比在容器中手动执行同一命令花费更多的时间。为了提供一些上下文,安装Matlab编译器运行时(MCR)的过程如下: 从MathWorks网站下载MCR安装程序 解包安装文件 运行/bin/win64/setup.exe-无提示模式-同意许可是(非交互式安装) 我创建了以下Dockerfile,以便在包含dotnet framework的Microsoft windowsservercore映像上设置MCR # Line 1: Use dotnet-framewo

我注意到Docker构建中的某些步骤比在容器中手动执行同一命令花费更多的时间。为了提供一些上下文,安装Matlab编译器运行时(MCR)的过程如下:

  • 从MathWorks网站下载MCR安装程序
  • 解包安装文件
  • 运行/bin/win64/setup.exe-无提示模式-同意许可是(非交互式安装)
  • 我创建了以下Dockerfile,以便在包含dotnet framework的Microsoft windowsservercore映像上设置MCR

    # Line 1: Use dotnet-framework base image
    FROM microsoft/dotnet-framework
    
    # Line 2: Download MCR installer (self-extracting executable) and save as ZIP file
    ADD https://www.mathworks.com/supportfiles/downloads/R2014b/deployment_files/R2014b/installers/win64/MCR_R2014b_win64_installer.exe C:\\MCR_R2014b_win64_installer.zip
    
    # Line 3: Use PowerShell
    SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
    
    # Line 4: Unpack ZIP contents to installation folder
    RUN Expand-Archive C:\\MCR_R2014b_win64_installer.zip -DestinationPath C:\\MCR_INSTALLER
    
    # Line 5: Run the setup command for a non-interactive installation of MCR
    RUN Start-Process C:\MCR_INSTALLER\bin\win64\setup.exe -ArgumentList '-mode silent', '-agreeToLicense yes' -Wait
    
    # Line 6: Remove ZIP and installation folder after setup is complete
    RUN Remove-Item -Force -Recurse C:\\MCR_INSTALLER, C:\\MCR_R2014b_win64_installer.zip
    
    我使用以下命令构建新图像:

    docker build -t analytics/dotnet-mcr --no-cache --force-rm .
    
    与在第4行停止,然后根据随后的图像从容器中手动运行MCR安装程序(使用完全相同的PowerShell命令)相比,MCR的安装速度非常慢。。。通过基于Dockerfile的构建执行相同步骤时,为什么需要额外3-4分钟

    注意:最佳实践建议使用下载实用程序而不是使用
    ADD
    ,但我没有任何与图像大小相关的限制,因为我正在删除中间图像以及删除已下载的安装程序和未打包的安装文件夹。另外,我喜欢看到
    ADD
    命令的更干净的下载进度条


    我非常感谢您提出的任何改进/优化建议。

    Docker使用图层。根据它,每个运行命令将创建一个层。在您的场景中,每个层都将存储与RUN命令相关的数据,因此将MCR_R2014b_win64_installer.zip作为单独的步骤删除将在以前的层中产生额外的空间。我建议尽可能减少运行命令


    请查看更多帮助。

    Docker使用图层。根据它,每个运行命令将创建一个层。在您的场景中,每个层都将存储与RUN命令相关的数据,因此将MCR_R2014b_win64_installer.zip作为单独的步骤删除将在以前的层中产生额外的空间。我建议尽可能减少运行命令

    请查看更多帮助