github.com/kim0/docker@v0.6.2-0.20161130212042-4addda3f07e7/Dockerfile.windows (about) 1 # escape=` 2 3 # ----------------------------------------------------------------------------------------- 4 # This file describes the standard way to build Docker in a container on Windows 5 # Server 2016 or Windows 10. 6 # 7 # Maintainer: @jhowardmsft 8 # ----------------------------------------------------------------------------------------- 9 10 11 # Prerequisites: 12 # -------------- 13 # 14 # 1. Windows 10 or Windows Server 2016 with all Windows updates applied. Pre-release 15 # versions of Windows are not supported (eg Windows Server 2016 TP5). The build 16 # number must be at least 14393. This can be confirmed, for example, by running 17 # the following from an elevated PowerShell prompt - this sample output is from a 18 # fully up to date machine as at late October 2016: 19 # 20 # >> PS C:\> $(gin).WindowsBuildLabEx 21 # >> 14393.321.amd64fre.rs1_release_inmarket.161004-2338 22 # 23 # 2. Git for Windows (or another git client) must be installed. https://git-scm.com/download/win. 24 # 25 # 3. The machine must be configured to run containers. For example, by following 26 # the quick start guidance at https://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/quick_start or 27 # https://github.com/docker/labs/blob/master/windows/windows-containers/Setup.md 28 29 30 # ----------------------------------------------------------------------------------------- 31 32 33 # Usage: 34 # ----- 35 # 36 # The following steps should be run from an (elevated*) Windows PowerShell prompt. 37 # 38 # (*In a default installation of containers on Windows following the quick-start guidance at 39 # https://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/quick_start, 40 # the docker.exe client must run elevated to be able to connect to the daemon). 41 # 42 # 1. Clone the sources from github.com: 43 # 44 # >> git clone https://github.com/docker/docker.git c:\go\src\github.com\docker\docker 45 # >> Cloning into 'c:\go\src\github.com\docker\docker'... 46 # >> remote: Counting objects: 186216, done. 47 # >> remote: Compressing objects: 100% (21/21), done. 48 # >> remote: Total 186216 (delta 5), reused 0 (delta 0), pack-reused 186195 49 # >> Receiving objects: 100% (186216/186216), 104.32 MiB | 8.18 MiB/s, done. 50 # >> Resolving deltas: 100% (123139/123139), done. 51 # >> Checking connectivity... done. 52 # >> Checking out files: 100% (3912/3912), done. 53 # >> PS C:\> 54 # 55 # 56 # 2. Change directory to the cloned docker sources: 57 # 58 # >> cd c:\go\src\github.com\docker\docker 59 # 60 # 61 # 3. Build a docker image with the components required to build the docker binaries from source: 62 # 63 # >> docker build -t nativebuildimage -f Dockerfile.windows . 64 # 65 # 66 # 4. Build the docker executable binaries in a container: 67 # 68 # >> docker run --name binaries nativebuildimage sh -c 'cd /c/go/src/github.com/docker/docker; hack/make.sh binary' 69 # 70 # 71 # 5. Copy the binaries out of the above container, replacing HostPath with an appropriate destination 72 # folder on the host system where you want the binaries to be located. 73 # 74 # >> $v=$(Get-Content ".\VERSION" -raw).ToString().Replace("`n","").Trim() 75 # >> docker cp binaries:c:\go\src\github.com\docker\docker\bundles\$v\binary-client\docker-$v.exe c:\HostPath\docker.exe 76 # >> docker cp binaries:c:\go\src\github.com\docker\docker\bundles\$v\binary-daemon\dockerd.exe c:\HostPath\dockerd.exe 77 # >> docker cp binaries:c:\go\src\github.com\docker\docker\bundles\$v\binary-daemon\docker-proxy-$v.exe c:\HostPath\docker-proxy.exe 78 # 79 # 80 # 6. (Optional) Remove the interim container holding the built executable binaries: 81 # 82 # >> docker rm binaries 83 # 84 # 85 # 7. (Optional) Remove the image used for the container in which the executable 86 # binaries are build. Tip - it may be useful to keep this image around if you need to 87 # build multiple times. Then you can take advantage of the builder cache to have an 88 # image which has all the components required to build the binaries already installed. 89 # 90 # >> docker rmi nativebuildimage 91 92 93 # ----------------------------------------------------------------------------------------- 94 95 96 # Important notes: 97 # --------------- 98 # 99 # The posix utilities from git aren't usable interactively as at October 2016. This 100 # is because they require a console window which isn't present in a container in Windows. 101 # See the example at the top of this file. Do NOT use -it in that docker run. It will not work. 102 # 103 # Don't attempt to use a volume for passing the source through to the container. The posix utilities will 104 # balk at reparse points. 105 # 106 # The downloaded files are not cleared from the image. go.zip is used by the Windows 107 # CI servers to ensure the host and image are running consistent versions of go. 108 # 109 # The GIT installer isn't very good at unattended install. We use techniques described 110 # at the links below to force it to set the path and other options accordingly. 111 # >> http://superuser.com/questions/944576/git-for-windows-silent-install-silent-arguments 112 # and follow through to installer at 113 # >> https://github.com/ferventcoder/chocolatey-packages/blob/master/automatic/git.install/tools/chocolateyInstall.ps1 114 115 116 # ----------------------------------------------------------------------------------------- 117 118 # The number of build steps below are explicitly minimised to improve performance. 119 FROM microsoft/windowsservercore 120 121 # Environment variable notes: 122 # - GO_VERSION must consistent with 'Dockerfile' used by Linux'. 123 # - FROM_DOCKERFILE is used for detection of building within a container. 124 ENV GO_VERSION=1.7.3 ` 125 GIT_LOCATION=https://github.com/git-for-windows/git/releases/download/v2.10.1.windows.1/Git-2.10.1-64-bit.exe ` 126 GOPATH=C:/go;C:/go/src/github.com/docker/docker/vendor ` 127 FROM_DOCKERFILE=1 128 129 WORKDIR c:/ 130 131 RUN ` 132 setx /M Path "%Path%;c:\gcc\bin;c:\go\bin;" && ` 133 setx GOROOT "c:\go" && ` 134 powershell -command ` 135 $ErrorActionPreference = 'Stop'; ` 136 Function Download-File([string] $source, [string] $target) { ` 137 $wc = New-Object net.webclient; $wc.Downloadfile($source, $target) ` 138 } ` 139 ` 140 Write-Host INFO: Downloading git...; ` 141 Download-File %GIT_LOCATION% gitsetup.exe; ` 142 ` 143 Write-Host INFO: Downloading go...; ` 144 Download-File https://golang.org/dl/go%GO_VERSION%.windows-amd64.zip go.zip; ` 145 ` 146 Write-Host INFO: Downloading compiler 1 of 3...; ` 147 Download-File https://raw.githubusercontent.com/jhowardmsft/docker-tdmgcc/master/gcc.zip gcc.zip; ` 148 ` 149 Write-Host INFO: Downloading compiler 2 of 3...; ` 150 Download-File https://raw.githubusercontent.com/jhowardmsft/docker-tdmgcc/master/runtime.zip runtime.zip; ` 151 ` 152 Write-Host INFO: Downloading compiler 3 of 3...; ` 153 Download-File https://raw.githubusercontent.com/jhowardmsft/docker-tdmgcc/master/binutils.zip binutils.zip; ` 154 ` 155 Write-Host INFO: Installing git...; ` 156 $installPath = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall'; ` 157 $installItem = 'Git_is1'; ` 158 New-Item -Path $installPath -Name $installItem -Force; ` 159 $installKey = $installPath+'\'+$installItem; ` 160 New-ItemProperty $installKey -Name 'Inno Setup CodeFile: Path Option' -Value 'CmdTools' -PropertyType 'String' -Force; ` 161 New-ItemProperty $installKey -Name 'Inno Setup CodeFile: Bash Terminal Option' -Value 'ConHost' -PropertyType 'String' -Force; ` 162 New-ItemProperty $installKey -Name 'Inno Setup CodeFile: CRLF Option' -Value 'CRLFCommitAsIs' -PropertyType 'String' -Force; ` 163 Start-Process gitsetup.exe -ArgumentList '/VERYSILENT /SUPPRESSMSGBOXES /CLOSEAPPLICATIONS /DIR=c:\git\' -Wait; ` 164 ` 165 Write-Host INFO: Expanding go..."; ` 166 Expand-Archive c:\go.zip -DestinationPath c:\; ` 167 ` 168 Write-Host INFO: Expanding compiler...; ` 169 Expand-Archive c:\gcc.zip -DestinationPath c:\gcc -Force; ` 170 Expand-Archive c:\runtime.zip -DestinationPath c:\gcc -Force; ` 171 Expand-Archive c:\binutils.zip -DestinationPath c:\gcc -Force; ` 172 ` 173 Write-Host INFO: Completed 174 175 # Prepare for building 176 COPY . /go/src/github.com/docker/docker 177