Skip to content
Snippets Groups Projects
Select Git revision
  • cvh
  • main
  • master default protected
3 results

Dockerfile

Blame
  • Dockerfile 8.70 KiB
    # This Dockerfile creates an image that:
    # - Has the correct MTU setting for networking from inside the container to work.
    # - Has Visual Studio 2019 Build Tools installed.
    # - Has MSVC 14.29 and clang 14.0 installed
    # - Has msys2 + git, curl, zip, unzip installed.
    # - Has Python 3.9 installed.
    # - Has Bazelisk 0.11 installed.
    # TODO: Consider replacing "ADD $URI $DEST" with "Invoke-WebRequest -Method Get -Uri $URI -OutFile $DEST"
    # Use the latest Windows Server Core image.
    
    FROM mcr.microsoft.com/windows/servercore:ltsc2019
    SHELL ["powershell.exe", "-ExecutionPolicy", "Bypass", "-Command", "$ErrorActionPreference='Stop'; $ProgressPreference='SilentlyContinue'; $VerbosePreference = 'Continue';"]
    
    ## TODO: Workaround until bug is fixed.
    RUN netsh interface ipv4 set subinterface \"vEthernet (Ethernet)\" mtu=1460 store=persistent
    
    RUN md C:\TEMP
    RUN md C:\TMP
    
    RUN (New-Object Net.WebClient).DownloadFile('https://aka.ms/vs/16/release/vs_community.exe', 'C:\TEMP\vs_community.exe');
    # Install Visual Studio 2019 Build Tools.
    SHELL ["cmd", "/S", "/C"]
    RUN C:\TEMP\vs_community.exe \
            --quiet --wait --norestart --nocache \
            --add Microsoft.VisualStudio.Component.CoreEditor \
            --add Microsoft.VisualStudio.Workload.CoreEditor \
            --add Microsoft.VisualStudio.Component.NuGet \
            --add Microsoft.Net.Component.4.6.1.TargetingPack \
            --add Microsoft.VisualStudio.Component.Roslyn.Compiler \
            --add Microsoft.VisualStudio.Component.Roslyn.LanguageServices \
            --add Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions \
            --add Microsoft.Net.Component.4.8.SDK \
            --add Microsoft.Net.Component.4.7.2.TargetingPack \
            --add Microsoft.VisualStudio.Component.TypeScript.4.3 \
            --add Microsoft.VisualStudio.Component.JavaScript.TypeScript \
            --add Microsoft.Component.MSBuild \
            --add Microsoft.VisualStudio.Component.TextTemplating \
            --add Microsoft.VisualStudio.Component.Debugger.JustInTime \
            --add Component.Microsoft.VisualStudio.LiveShare \
            --add Microsoft.VisualStudio.Component.IntelliCode \
            --add Microsoft.Net.Component.4.8.TargetingPack \
            --add Microsoft.VisualStudio.Component.VC.CoreIde \
            --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 \
            --add Microsoft.VisualStudio.Component.Graphics.Tools \
            --add Microsoft.VisualStudio.Component.VC.DiagnosticTools \
            --add Microsoft.VisualStudio.Component.Windows10SDK.19041 \
            --add Microsoft.VisualStudio.Component.VC.Redist.14.Latest \
            --add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core \
            --add Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.CMake \
            --add Microsoft.VisualStudio.Component.VC.CMake.Project \
            --add Microsoft.VisualStudio.Component.VC.ATL \
            --add Microsoft.VisualStudio.Component.VC.TestAdapterForBoostTest \
            --add Microsoft.VisualStudio.Component.VC.TestAdapterForGoogleTest \
            --add Microsoft.VisualStudio.Component.VC.ATLMFC \
            --add Microsoft.VisualStudio.Component.VC.ASAN \
            --add Microsoft.VisualStudio.Component.VC.Modules.x86.x64 \
            --add Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset \
            --add Microsoft.VisualStudio.Component.VC.Llvm.Clang \
            --add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang \
            --add Microsoft.VisualStudio.Workload.NativeDesktop \
            --add Microsoft.VisualStudio.Component.VC.14.29.x86.x64 \
            --add Microsoft.VisualStudio.Component.VC.CLI.Support \
            --add Microsoft.Net.Component.4.6.1.SDK \
            --add Microsoft.VisualStudio.Component.Windows10SDK.20348 \
     || IF "%ERRORLEVEL%"=="3010" EXIT 0
    
    SHELL ["powershell.exe", "-ExecutionPolicy", "Bypass", "-Command", "$ErrorActionPreference='Stop'; $ProgressPreference='SilentlyContinue'; $VerbosePreference = 'Continue';"]
    
    # Install 7-Zip and add it to the path.
    RUN (New-Object Net.WebClient).DownloadFile('https://www.7-zip.org/a/7z1801-x64.msi', '7z.msi'); \
        Start-Process msiexec.exe -ArgumentList \"/i 7z.msi /qn /norestart /log C:\\TEMP\\7z_install_log.txt\" -wait; \
        Remove-Item .\7z.msi;
    
    # Install msys2, and add some extra tools.
    RUN (New-Object Net.WebClient).DownloadFile( \
             'http://repo.msys2.org/distrib/x86_64/msys2-base-x86_64-20200602.tar.xz', \
             'msys2.tar.xz'); \
        Start-Process -FilePath \"C:\Program Files\7-Zip\7z.exe\" -ArgumentList 'x msys2.tar.xz -oC:\TEMP\msys2.tar' -Wait; \
        Start-Process -FilePath \"C:\Program Files\7-Zip\7z.exe\" -ArgumentList 'x C:\TEMP\msys2.tar -oC:\tools' -Wait; \
        $env:PATH = [Environment]::GetEnvironmentVariable('PATH', 'Machine') + ';C:\tools\msys64;C:\tools\msys64\usr\bin\'; \
        [Environment]::SetEnvironmentVariable('PATH', $env:PATH, 'Machine');
    
    # Install clang.
    RUN (New-Object Net.WebClient).DownloadFile( \
             'https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.0/LLVM-14.0.0-win64.exe', \
             'LLVM.exe'); \
        Start-Process -FilePath \"C:\Program Files\7-Zip\7z.exe\" -ArgumentList 'x LLVM.exe -oC:\tools\llvm' -Wait; \
        $env:PATH = [Environment]::GetEnvironmentVariable('PATH', 'Machine') + ';C:\tools\llvm\bin'; \
        [Environment]::SetEnvironmentVariable('PATH', $env:PATH, 'Machine');
    
    
    # Disable signature checking on pacman because we cannot initialize the keyring
    RUN Add-Content -Path C:\tools\msys64\etc\pacman.d\mirrorlist.mingw32 -Value 'SigLevel = Never'
    RUN Add-Content -Path C:\tools\msys64\etc\pacman.d\mirrorlist.mingw64 -Value 'SigLevel = Never'
    RUN Add-Content -Path C:\tools\msys64\etc\pacman.d\mirrorlist.msys -Value 'SigLevel = Never'
    
    # Install pacman packages.
    RUN pacman --noconfirm -Syy git curl zip unzip patch
    
    # Install Python 3.9.7
    ENV PYTHON_VERSION 3.9.7
    
    RUN $url = ('https://www.python.org/ftp/python/{0}/python-{0}-amd64.exe' -f $env:PYTHON_VERSION); \
    	Write-Host ('Downloading {0} ...' -f $url); \
    	[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; \
    	(New-Object Net.WebClient).DownloadFile($url, 'C:\tmp\pyinstall.exe'); \
    	\
    	Write-Host 'Installing...'; \
            Start-Process -FilePath \"C:\tmp\pyinstall.exe\" -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1 TargetDir=C:\Python39' -Wait; \
    	\
    	Write-Host 'Verifying install ...'; \
    	Write-Host '  python --version'; C:\python39\python.exe --version; \
    	\
    	Write-Host 'Verifying pip install ...'; \
    	C:\python39\python.exe -m pip --version; \
    	\
    	Write-Host 'Removing ...'; \
    	Remove-Item C:\tmp\pyinstall.exe -Force; \
    	\
    	Write-Host 'Complete.';
    
    # Install the pip packages
    RUN python -m pip install --ignore-installed --force-reinstall --upgrade \
        setuptools packaging\
        pyreadline tf-estimator-nightly tb-nightly backports.weakref==1.0rc1 \
        protobuf absl-py portpicker gast termcolor astor h5py numpy \
        scipy keras-nightly keras_applications keras_preprocessing
    
    RUN \
      Add-Type -AssemblyName \"System.IO.Compression.FileSystem\"; \
      $zulu_url = \"https://cdn.azul.com/zulu/bin/zulu8.28.0.1-jdk8.0.163-win_x64.zip\"; \
      $zulu_zip = \"c:\\temp\\zulu8.28.0.1-jdk8.0.163-win_x64.zip\"; \
      $zulu_extracted_path = \"c:\\temp\\\" + [IO.Path]::GetFileNameWithoutExtension($zulu_zip); \
      $zulu_root = \"c:\\openjdk\"; \
      (New-Object Net.WebClient).DownloadFile($zulu_url, $zulu_zip); \
      [System.IO.Compression.ZipFile]::ExtractToDirectory($zulu_zip, \"c:\\temp\"); \
      Move-Item $zulu_extracted_path -Destination $zulu_root; \
      Remove-Item $zulu_zip; \
      $env:PATH = [Environment]::GetEnvironmentVariable(\"PATH\", \"Machine\") + \";${zulu_root}\\bin\"; \
      [Environment]::SetEnvironmentVariable(\"PATH\", $env:PATH, \"Machine\"); \
      $env:JAVA_HOME = $zulu_root; \
      [Environment]::SetEnvironmentVariable(\"JAVA_HOME\", $env:JAVA_HOME, \"Machine\")
    
    # Environment variables to work around the msys issues
    ENV MSYS_NO_PATHCONV 1
    ENV MSYS2_ARG_CONV_EXCL *
    
    # See https://docs.microsoft.com/en-us/visualstudio/releases/2019/history for the mapping
    ENV BAZEL_VC_FULL_VERSION 14.29.30133
    
    # Make sure path to MSVC tools is available to Bazel
    ENV BAZEL_VC "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC"
    
    # Install bazelisk
    RUN md C:\tools\bazel
    RUN (New-Object Net.WebClient).DownloadFile( \
             'https://github.com/bazelbuild/bazelisk/releases/download/v1.11.0/bazelisk-windows-amd64.exe', \
             'C:\tools\bazel\bazel.exe'); \
        $env:PATH = [Environment]::GetEnvironmentVariable('PATH', 'Machine') + ';C:\tools\bazel'; \
        [Environment]::SetEnvironmentVariable('PATH', $env:PATH, 'Machine');
    
    # Restore default shell for Windows containers.
    SHELL ["cmd.exe", "/s", "/c"]
    # Default to PowerShell if no other command specified.
    CMD ["powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"] \
    	\
    	Write-Host 'Verifying pip install ...'; \
    	python -m pip --version; \
    	\
    	Write-Host 'Complete.';