github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/docs/contributing/software-req-win.md (about)

     1  ### Build and test Moby on Windows
     2  
     3  This page explains how to get the software you need to build, test, and run the
     4  Moby source code for Windows and setup the required software and services:
     5  
     6  - Windows containers
     7  - GitHub account
     8  - Git
     9  
    10  ## Prerequisites
    11  
    12  ### 1. Windows Server 2016 or Windows 10 with all Windows updates applied
    13  
    14  The major build number must be at least 14393. This can be confirmed, for example,
    15  by running the following from an elevated PowerShell prompt - this sample output
    16  is from a fully up to date machine as at mid-November 2016:
    17  
    18  
    19      PS C:\> $(gin).WindowsBuildLabEx
    20      14393.447.amd64fre.rs1_release_inmarket.161102-0100
    21  
    22  ### 2. Git for Windows (or another git client) must be installed
    23  
    24  https://git-scm.com/download/win.
    25  
    26  ### 3. The machine must be configured to run containers
    27  
    28  For example, by following the quick start guidance at
    29  https://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/quick_start or https://github.com/docker/labs/blob/master/windows/windows-containers/README.md
    30  
    31  ### 4. If building in a Hyper-V VM
    32  
    33  For Windows Server 2016 using Windows Server containers as the default option,
    34  it is recommended you have at least 1GB of memory assigned;
    35  For Windows 10 where Hyper-V Containers are employed, you should have at least
    36  4GB of memory assigned.
    37  Note also, to run Hyper-V containers in a VM, it is necessary to configure the VM
    38  for nested virtualization.
    39  
    40  ## Usage
    41  
    42  The following steps should be run from an elevated Windows PowerShell prompt.
    43  
    44  >**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,
    45  the `docker.exe` client must run elevated to be able to connect to the daemon).
    46  
    47  ### 1. Windows containers
    48  
    49  To test and run the Windows Moby engine, you need a system that supports Windows Containers:
    50  
    51  - Windows 10 Anniversary Edition
    52  - Windows Server 2016 running in a VM, on bare metal or in the cloud
    53  
    54  Check out the [getting started documentation](https://github.com/docker/labs/blob/master/windows/windows-containers/README.md) for details.
    55  
    56  ### 2. GitHub account
    57  
    58  To contribute to the Docker project, you need a <a href="https://github.com" target="_blank">GitHub account</a>.
    59  A free account is fine. All the Moby project repositories are public and visible to everyone.
    60  
    61  This guide assumes that you have basic familiarity with Git and Github terminology
    62  and usage.
    63  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/)
    64  to get up to speed on Github.
    65  
    66  ### 3. Git
    67  
    68  In PowerShell, run:
    69  
    70      Invoke-Webrequest "https://github.com/git-for-windows/git/releases/download/v2.7.2.windows.1/Git-2.7.2-64-bit.exe" -OutFile git.exe -UseBasicParsing
    71      Start-Process git.exe -ArgumentList '/VERYSILENT /SUPPRESSMSGBOXES /CLOSEAPPLICATIONS /DIR=c:\git\' -Wait
    72      setx /M PATH "$env:Path;c:\git\cmd"
    73  
    74  You are now ready clone and build the Moby source code.
    75  
    76  ### 4. Clone Moby
    77  
    78  In a new (to pick up the path change) PowerShell prompt, run:
    79  
    80      git clone https://github.com/moby/moby
    81      cd moby
    82  
    83  This clones the main Moby repository. Check out [Moby Project](https://mobyproject.org)
    84  to learn about the other software that powers the Moby platform.
    85  
    86  ### 5. Build and run
    87  
    88  Create a builder-container with the Moby source code. You can change the source
    89  code on your system and rebuild any time:
    90  
    91      docker build -t nativebuildimage -f .\Dockerfile.windows .
    92      docker build -t nativebuildimage -f Dockerfile.windows -m 2GB .  # (if using Hyper-V containers)
    93  
    94  To build Moby, run:
    95  
    96      $DOCKER_GITCOMMIT=(git rev-parse --short HEAD)
    97      docker run --name binaries -e DOCKER_GITCOMMIT=$DOCKER_GITCOMMIT nativebuildimage hack\make.ps1 -Binary
    98      docker run --name binaries -e DOCKER_GITCOMMIT=$DOCKER_GITCOMMIT -m 2GB nativebuildimage hack\make.ps1 -Binary  # (if using Hyper-V containers)
    99  
   100  Copy out the resulting Windows Moby Engine binary to `dockerd.exe` in the
   101  current directory:
   102  
   103      docker cp binaries:C:\gopath\src\github.com\docker\docker\bundles\docker.exe docker.exe
   104      docker cp binaries:C:\gopath\src\github.com\docker\docker\bundles\dockerd.exe dockerd.exe
   105  
   106  To test it, stop the system Docker daemon and start the one you just built:
   107  
   108      Stop-Service Docker
   109      .\dockerd.exe -D
   110  
   111  The other make targets work too, to run unit tests try:
   112  `docker run --rm docker-builder sh -c 'cd /c/gopath/src/github.com/Prakhar-Agarwal-byte/moby; hack/make.sh test-unit'`.
   113  
   114  ### 6. Remove the interim binaries container
   115  
   116  _(Optional)_
   117  
   118      docker rm binaries
   119  
   120  ### 7. Remove the image
   121  
   122  _(Optional)_
   123  
   124  It may be useful to keep this image around if you need to build multiple times.
   125  Then you can take advantage of the builder cache to have an image which has all
   126  the components required to build the binaries already installed.
   127  
   128      docker rmi nativebuildimage
   129  
   130  ## Validation
   131  
   132  The validation tests can only run directly on the host.
   133  This is because they calculate information from the git repo, but the .git directory
   134  is not passed into the image as it is excluded via `.dockerignore`.
   135  Run the following from a Windows PowerShell prompt (elevation is not required):
   136  (Note Go must be installed to run these tests)
   137  
   138      hack\make.ps1 -DCO -PkgImports -GoFormat
   139  
   140  ## Unit tests
   141  
   142  To run unit tests, ensure you have created the nativebuildimage above.
   143  Then run one of the following from an (elevated) Windows PowerShell prompt:
   144  
   145      docker run --rm nativebuildimage hack\make.ps1 -TestUnit
   146      docker run --rm -m 2GB nativebuildimage hack\make.ps1 -TestUnit  # (if using Hyper-V containers)
   147  
   148  To run unit tests and binary build, ensure you have created the nativebuildimage above.
   149  Then run one of the following from an (elevated) Windows PowerShell prompt:
   150  
   151      docker run nativebuildimage hack\make.ps1 -All
   152      docker run -m 2GB nativebuildimage hack\make.ps1 -All  # (if using Hyper-V containers)
   153  
   154  ## Windows limitations
   155  
   156  Don't attempt to use a bind mount to pass a local directory as the bundles
   157  target directory.
   158  It does not work (golang attempts for follow a mapped folder incorrectly).
   159  Instead, use docker cp as per the example.
   160  
   161  `go.zip` is not removed from the image as it is used by the Windows CI servers
   162  to ensure the host and image are running consistent versions of go.
   163  
   164  Nanoserver support is a work in progress. Although the image will build if the
   165  `FROM` statement is updated, it will not work when running autogen through `hack\make.ps1`.
   166  It is suspected that the required GCC utilities (eg gcc, windres, windmc) silently
   167  quit due to the use of console hooks which are not available.
   168  
   169  The docker integration tests do not currently run in a container on Windows,
   170  predominantly due to Windows not supporting privileged mode, so anything using a volume would fail.
   171  They (along with the rest of the docker CI suite) can be run using
   172  https://github.com/kevpar/docker-w2wCIScripts/blob/master/runCI/Invoke-DockerCI.ps1.
   173  
   174  ## Where to go next
   175  
   176  In the next section, you'll [configure the project to be properly recognized by the IDE](set-up-ide.md).
   177  
   178  If you don't want to use IDE, you can proceed to the next step
   179  and [learn how to set up and configure Git for contributing to Moby](set-up-git.md).