From a47846e2db07755433fc24342ab2a94d44d99aa2 Mon Sep 17 00:00:00 2001 From: Chris Hunt Date: Mon, 16 Oct 2017 19:11:43 -0400 Subject: [PATCH] Update software-req-win to current instructions (#4808) --- opensource/project/software-req-win.md | 145 ++++++++++++++++++++++--- 1 file changed, 127 insertions(+), 18 deletions(-) diff --git a/opensource/project/software-req-win.md b/opensource/project/software-req-win.md index 4f46d64f26..3c9422154a 100644 --- a/opensource/project/software-req-win.md +++ b/opensource/project/software-req-win.md @@ -4,28 +4,70 @@ keywords: development, inception, container, image Dockerfile, dependencies, Go, title: Build and test Docker on Windows --- -This page explains how to get the software you need to build, test, and run the Docker source code for Windows and setup the required software and services: +This page explains how to get the software you need to build, test, and run the +Docker source code for Windows and setup the required software and services: - Windows containers - GitHub account - Git -## 1. Docker Windows containers +## Prerequisites + +### 1. Windows Server 2016 or Windows 10 with all Windows updates applied + +The major build number must be at least 14393. This can be confirmed, for example, +by running the following from an elevated PowerShell prompt - this sample output +is from a fully up to date machine as at mid-November 2016: + + + PS C:\> $(gin).WindowsBuildLabEx + 14393.447.amd64fre.rs1_release_inmarket.161102-0100 + +### 2. Git for Windows (or another git client) must be installed + +https://git-scm.com/download/win. + +### 3. The machine must be configured to run containers + +For example, by following the quick start guidance at +https://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/quick_start or https://github.com/docker/labs/blob/master/windows/windows-containers/Setup.md + +### 4. If building in a Hyper-V VM + +For Windows Server 2016 using Windows Server containers as the default option, +it is recommended you have at least 1GB of memory assigned; +For Windows 10 where Hyper-V Containers are employed, you should have at least +4GB of memory assigned. +Note also, to run Hyper-V containers in a VM, it is necessary to configure the VM +for nested virtualization. + +## Usage + +The following steps should be run from an elevated Windows PowerShell prompt. + +>**Note**: In a default installation of containers on Windows following the quick-start guidance at https://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/quick_start, +the `docker.exe` client must run elevated to be able to connect to the daemon). + +### 1. Docker Windows containers To test and run the Windows Docker daemon, you need a system that supports Windows Containers: - * Windows 10 Anniversary Edition - * Windows Server 2016 running in a VM, on bare metal or in the cloud +- Windows 10 Anniversary Edition +- Windows Server 2016 running in a VM, on bare metal or in the cloud Check out the [getting started documentation](https://github.com/docker/labs/blob/master/windows/windows-containers/Setup.md) for details. -## 2. GitHub account +### 2. GitHub account -To contribute to the Docker project, you need a GitHub account. A free account is fine. All the Docker project repositories are public and visible to everyone. +To contribute to the Docker project, you need a GitHub account. +A free account is fine. All the Docker project repositories are public and visible to everyone. -This guide assumes that you have basic familiarity with Git and Github terminology and usage. Refer to [GitHub For Beginners: Don’t Get Scared, Get Started](http://readwrite.com/2013/09/30/understanding-github-a-journey-for-beginners-part-1/) to get up to speed on Github. +This guide assumes that you have basic familiarity with Git and Github terminology +and usage. +Refer to [GitHub For Beginners: Don’t Get Scared, Get Started](http://readwrite.com/2013/09/30/understanding-github-a-journey-for-beginners-part-1/) +to get up to speed on Github. -## 3. Git +### 3. Git In PowerShell, run: @@ -35,36 +77,103 @@ In PowerShell, run: You are now ready clone and build the Docker source code. -## 4. Clone Docker +### 4. Clone Docker In a new (to pick up the path change) PowerShell prompt, run: git clone https://github.com/moby/moby cd moby -This clones the main Docker repository. Check out [Docker on GitHub](https://github.com/moby/moby) to learn about the other software that powers the Docker platform. +This clones the main Docker repository. Check out [Docker on GitHub](https://github.com/moby/moby) +to learn about the other software that powers the Docker platform. -## 5. Build and run +### 5. Build and run -Create a builder-container with the Docker source code. You can change the source code on your system and rebuild any time: +Create a builder-container with the Docker source code. You can change the source +code on your system and rebuild any time: - docker build -t nativebuildimage -f .\Dockerfile.windows . + docker build -t nativebuildimage -f .\Dockerfile.windows . + docker build -t nativebuildimage -f Dockerfile.windows -m 2GB . # (if using Hyper-V containers) To build Docker, run: - docker run --name out nativebuildimage sh -c 'cd /c/go/src/github.com/moby/moby; hack/make.sh binary' + $DOCKER_GITCOMMIT=(git rev-parse --short HEAD) + docker run --name binaries -e DOCKER_GITCOMMIT=$DOCKER_GITCOMMIT nativebuildimage hack\make.ps1 -Binary + docker run --name binaries -e DOCKER_GITCOMMIT=$DOCKER_GITCOMMIT -m 2GB nativebuildimage hack\make.ps1 -Binary # (if using Hyper-V containers) -Copy out the resulting Windows Docker daemon binary to dockerd.exe in the current directory: +Copy out the resulting Windows Docker daemon binary to `dockerd.exe` in the +current directory: - docker cp out:C:\go\src\github.com\docker\docker\bundles\$(cat VERSION)\binary-daemon\dockerd-$(cat VERSION).exe dockerd.exe + docker cp binaries:C:\go\src\github.com\docker\docker\bundles\docker.exe docker.exe + docker cp binaries:C:\go\src\github.com\docker\docker\bundles\dockerd.exe dockerd.exe To test it, stop the system Docker daemon and start the one you just built: Stop-Service Docker - .\dockerd-1.13.0-dev.exe -D + .\dockerd.exe -D -The other make targets work too, to run unit tests try: `docker run --rm docker-builder sh -c 'cd /c/go/src/github.com/moby/moby; hack/make.sh test-unit'`. +The other make targets work too, to run unit tests try: +`docker run --rm docker-builder sh -c 'cd /c/go/src/github.com/moby/moby; hack/make.sh test-unit'`. +### 6. Remove the interim binaries container + +_(Optional)_ + + docker rm binaries + +### 7. Remove the image + +_(Optional)_ + +It may be useful to keep this image around if you need to build multiple times. +Then you can take advantage of the builder cache to have an image which has all +the components required to build the binaries already installed. + + docker rmi nativebuildimage + +## Validation + +The validation tests can only run directly on the host. +This is because they calculate information from the git repo, but the .git directory +is not passed into the image as it is excluded via `.dockerignore`. +Run the following from a Windows PowerShell prompt (elevation is not required): +(Note Go must be installed to run these tests) + + hack\make.ps1 -DCO -PkgImports -GoFormat + +## Unit tests + +To run unit tests, ensure you have created the nativebuildimage above. +Then run one of the following from an (elevated) Windows PowerShell prompt: + + docker run --rm nativebuildimage hack\make.ps1 -TestUnit + docker run --rm -m 2GB nativebuildimage hack\make.ps1 -TestUnit # (if using Hyper-V containers) + +To run unit tests and binary build, ensure you have created the nativebuildimage above. +Then run one of the following from an (elevated) Windows PowerShell prompt: + + docker run nativebuildimage hack\make.ps1 -All + docker run -m 2GB nativebuildimage hack\make.ps1 -All # (if using Hyper-V containers) + +## Windows limitations + +Don't attempt to use a bind mount to pass a local directory as the bundles +target directory. +It does not work (golang attempts for follow a mapped folder incorrectly). +Instead, use docker cp as per the example. + +`go.zip` is not removed from the image as it is used by the Windows CI servers +to ensure the host and image are running consistent versions of go. + +Nanoserver support is a work in progress. Although the image will build if the +`FROM` statement is updated, it will not work when running autogen through `hack\make.ps1`. +It is suspected that the required GCC utilities (eg gcc, windres, windmc) silently +quit due to the use of console hooks which are not available. + +The docker integration tests do not currently run in a container on Windows, +predominantly due to Windows not supporting privileged mode, so anything using a volume would fail. +They (along with the rest of the docker CI suite) can be run using +https://github.com/jhowardmsft/docker-w2wCIScripts/blob/master/runCI/Invoke-DockerCI.ps1. ## Where to go next