github.com/feiyang21687/docker@v1.5.0/docs/sources/contributing/devenvironment.md (about) 1 page_title: Setting Up a Dev Environment 2 page_description: Guides on how to contribute to docker 3 page_keywords: Docker, documentation, developers, contributing, dev environment 4 5 # Setting Up a Dev Environment 6 7 To make it easier to contribute to Docker, we provide a standard 8 development environment. It is important that the same environment be 9 used for all tests, builds and releases. The standard development 10 environment defines all build dependencies: system libraries and 11 binaries, go environment, go dependencies, etc. 12 13 **Things you need:** 14 15 * Docker 16 * git 17 * make 18 19 ## Install Docker 20 21 Docker's build environment itself is a Docker container, so the first 22 step is to install Docker on your system. 23 24 You can follow the [install instructions most relevant to your 25 system](https://docs.docker.com/installation/). Make sure you 26 have a working, up-to-date docker installation, then continue to the 27 next step. 28 29 ## Install tools used for this tutorial 30 31 Install `git`; honest, it's very good. You can use 32 other ways to get the Docker source, but they're not anywhere near as 33 easy. 34 35 Install `make`. This tutorial uses our base Makefile 36 to kick off the docker containers in a repeatable and consistent way. 37 Again, you can do it in other ways but you need to do more work. 38 39 ## Check out the Source 40 41 $ git clone https://git@github.com/docker/docker 42 $ cd docker 43 44 To checkout a different revision just use `git checkout` 45 with the name of branch or revision number. 46 47 ## Build the Environment 48 49 This following command builds a development environment using the 50 `Dockerfile` in the current directory. Essentially, it installs all 51 the build and runtime dependencies necessary to build and test Docker. 52 Your first build will take some time to complete. On Linux systems and on Mac 53 OS X from within the `boot2docker` shell: 54 55 $ make build 56 57 > **Note**: 58 > On Mac OS X, the Docker make targets such as `build`, `binary`, and `test` 59 > should **not** be built by the 'root' user. Therefore, you shouldn't use `sudo` when 60 > running these commands on OS X. 61 > On Linux, we suggest you add your current user to the `docker` group via 62 > [these 63 > instructions](http://docs.docker.com/installation/ubuntulinux/#giving-non-root-access). 64 65 If the build is successful, congratulations! You have produced a clean 66 build of docker, neatly encapsulated in a standard build environment. 67 68 69 ## Build the Docker Binary 70 71 To create the Docker binary, run this command: 72 73 $ make binary 74 75 This will create the Docker binary in `./bundles/<version>-dev/binary/`. If you 76 do not see files in the `./bundles` directory in your host, your `BINDDIR` 77 setting is not set quite right. You want to run the following command: 78 79 $ make BINDDIR=. binary 80 81 If you are on a non-Linux platform, e.g., OSX, you'll want to run `make cross` 82 or `make BINDDIR=. cross`. 83 84 ### Using your built Docker binary 85 86 The binary is available outside the container in the directory 87 `./bundles/<version>-dev/binary/`. You can swap your 88 host docker executable with this binary for live testing - for example, 89 on ubuntu: 90 91 $ sudo service docker stop ; sudo cp $(which docker) $(which docker)_ ; sudo cp ./bundles/<version>-dev/binary/docker-<version>-dev $(which docker);sudo service docker start 92 93 > **Note**: 94 > Its safer to run the tests below before swapping your hosts docker binary. 95 96 ## Run the Tests 97 98 To execute the test cases, run this command: 99 100 $ make test 101 102 If the test are successful then the tail of the output should look 103 something like this 104 105 --- PASS: TestWriteBroadcaster (0.00 seconds) 106 === RUN TestRaceWriteBroadcaster 107 --- PASS: TestRaceWriteBroadcaster (0.00 seconds) 108 === RUN TestTruncIndex 109 --- PASS: TestTruncIndex (0.00 seconds) 110 === RUN TestCompareKernelVersion 111 --- PASS: TestCompareKernelVersion (0.00 seconds) 112 === RUN TestHumanSize 113 --- PASS: TestHumanSize (0.00 seconds) 114 === RUN TestParseHost 115 --- PASS: TestParseHost (0.00 seconds) 116 === RUN TestParseRepositoryTag 117 --- PASS: TestParseRepositoryTag (0.00 seconds) 118 === RUN TestGetResolvConf 119 --- PASS: TestGetResolvConf (0.00 seconds) 120 === RUN TestParseRelease 121 --- PASS: TestParseRelease (0.00 seconds) 122 === RUN TestDependencyGraphCircular 123 --- PASS: TestDependencyGraphCircular (0.00 seconds) 124 === RUN TestDependencyGraph 125 --- PASS: TestDependencyGraph (0.00 seconds) 126 PASS 127 ok github.com/docker/docker/utils 0.017s 128 129 If $TESTFLAGS is set in the environment, it is passed as extra arguments 130 to `go test`. You can use this to select certain tests to run, e.g., 131 132 $ TESTFLAGS='-test.run \^TestBuild\$' make test 133 134 If the output indicates "FAIL" and you see errors like this: 135 136 server.go:1302 Error: Insertion failed because database is full: database or disk is full 137 138 utils_test.go:179: Error copy: exit status 1 (cp: writing '/tmp/docker-testd5c9-[...]': No space left on device 139 140 Then you likely don't have enough memory available the test suite. 2GB 141 is recommended. 142 143 ## Use Docker 144 145 You can run an interactive session in the newly built container: 146 147 $ make shell 148 149 # type 'exit' or Ctrl-D to exit 150 151 ## Build And View The Documentation 152 153 If you want to read the documentation from a local website, or are 154 making changes to it, you can build the documentation and then serve it 155 by: 156 157 $ make docs 158 159 # when its done, you can point your browser to http://yourdockerhost:8000 160 # type Ctrl-C to exit 161 162 **Need More Help?** 163 164 If you need more help then hop on to the [#docker-dev IRC 165 channel](irc://chat.freenode.net#docker-dev) or post a message on the 166 [Docker developer mailing 167 list](https://groups.google.com/d/forum/docker-dev).