GCS SRE TEAM

GCS Service Blog

If you can DREAM it, You can DO it!

AWS CodeBuild - 建立Windows主機的DockerImage

如何建立自己Windows主機的DockerImage

GCS SRE Team

2 minute read

如果想用AWS CodeBuild Windows Server 建置 .Net, 或者一些C# Framework, 有時候會遇到使用原生的無法正常編譯的問題, 這邊就要自己建立合適環境的Docker Image.

Instructions 環境建置: 使用一台主機或者虛擬機或者直接 Launch一台EC2 (Windows Sever 2016 with Containers) 至少給60GB空間 建議是t2. Medium以上的機器, build image效率會較好 以下是直接透過EC2進行的步驟 啟動完成後透過遠端桌面連入

  • 運行命令管理員(cmd.exe)
  • 建立build Image的工作目錄:
  mkdir C:\\BuildTools
  cd C:\\BuildTools
  • 建立C:\BuildTools\Dockerfile:
  # escape=\`

  FROM microsoft/dotnet-framework:4.7.2-runtime

  SHELL \["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"\]

  \#Install NuGet CLI
  ENV NUGET_VERSION 4.4.1
  RUN New-Item -Type Directory $Env:ProgramFiles\\NuGet; \`
  Invoke-WebRequest -UseBasicParsing https://dist.nuget.org/win-x86-commandline/v$Env:NUGET_VERSION/nuget.exe -OutFile $Env:ProgramFiles\\NuGet\\nuget.exe

  # Install VS Test Agent

  RUN Invoke-WebRequest -UseBasicParsing https://download.visualstudio.microsoft.com/download/pr/12210068/8a386d27295953ee79281fd1f1832e2d/vs_TestAgent.exe -OutFile vs_TestAgent.exe; `Start-Process vs_TestAgent.exe -ArgumentList '--quiet', '--norestart', '--nocache' -NoNewWindow -Wait;`
  Remove-Item -Force vs_TestAgent.exe; \`

  # Install VS Build Tools

        Invoke-WebRequest -UseBasicParsing https://download.visualstudio.microsoft.com/download/pr/12210059/e64d79b40219aea618ce2fe10ebd5f0d/vs_BuildTools.exe -OutFile vs_BuildTools.exe; `
        # Installer won't detect DOTNET_SKIP_FIRST_TIME_EXPERIENCE if ENV is used, must use setx /M
        setx /M DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1; `
        Start-Process vs_BuildTools.exe -ArgumentList '--add', 'Microsoft.VisualStudio.Workload.MSBuildTools', '--add', 'Microsoft.VisualStudio.Workload.NetCoreBuildTools', '--add', 'Microsoft.VisualStudio.Workload.WebBuildTools;includeRecommended', '--quiet', '--norestart', '--nocache' -NoNewWindow -Wait; `
        Remove-Item -Force vs_buildtools.exe; `
        Remove-Item -Force -Recurse \"${Env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\"; `
        Remove-Item -Force -Recurse ${Env:TEMP}\*; `
        Remove-Item -Force -Recurse \"${Env:ProgramData}\Package Cache\"

  # Set PATH in one layer to keep image size down.

  RUN setx /M PATH $(${Env:PATH} `+ \";${Env:ProgramFiles}\NuGet\"`
  \+ ";${Env:ProgramFiles(x86)}\\Microsoft Visual Studio\\2017\\TestAgent\\Common7\\IDE\\CommonExtensions\\Microsoft\\TestWindow" \`
  \+ ";${Env:ProgramFiles(x86)}\\Microsoft Visual Studio\\2017\\BuildTools\\MSBuild\\15.0\\Bin")

  # Install Targeting Packs

  RUN @('4.0', '4.5.2', '4.6.2', '4.7.2') `| %{`
  Invoke-WebRequest -UseBasicParsing https://dotnetbinaries.blob.core.windows.net/referenceassemblies/v${_}.zip -OutFile referenceassemblies.zip; `Expand-Archive -Force referenceassemblies.zip -DestinationPath \"${Env:ProgramFiles(x86)}\Reference Assemblies\Microsoft\Framework\.NETFramework\";`
  Remove-Item -Force referenceassemblies.zip; \`
  }
  • 執行build Image的指令
  docker build -t buildtool:latest -m 3GB .
  • 等待運行完成後
    可以用下面的指令進入容器內測試
  docker run -it buildtool
  • 測試OK後可以準備上傳到AWS ECR
  aws ecr get-login --region region --no-include-email
  • 將輸出的登入資訊再貼一次登入docker
    登入docker後即可將剛剛的buildtool上傳到aws ecr
    docker tag buildtool:latest #ACCOUNT_ID#.dkr.ecr.#REGION#.amazonaws.com/ buildtool:latest
    docker push #ACCOUNT_ID#.dkr.ecr.#REGION#.amazonaws.com/buildtool:latest
  • 上傳完成後即可在AWS ECR找到剛剛上傳的Image, 在CodeBuild的選項也就出現可以選擇

近期貼文

分類

關於

GCS SRE TEAM