...

Text file src/github.com/docker/distribution/BUILDING.md

Documentation: github.com/docker/distribution

     1
     2# Building the registry source
     3
     4## Use-case
     5
     6This is useful if you intend to actively work on the registry.
     7
     8### Alternatives
     9
    10Most people should use the [official Registry docker image](https://hub.docker.com/r/library/registry/).
    11
    12People looking for advanced operational use cases might consider rolling their own image with a custom Dockerfile inheriting `FROM registry:2`.
    13
    14OS X users who want to run natively can do so following [the instructions here](https://github.com/docker/docker.github.io/blob/master/registry/recipes/osx-setup-guide.md).
    15
    16### Gotchas
    17
    18You are expected to know your way around with go & git.
    19
    20If you are a casual user with no development experience, and no preliminary knowledge of go, building from source is probably not a good solution for you.
    21
    22## Build the development environment
    23
    24The first prerequisite of properly building distribution targets is to have a Go
    25development environment setup. Please follow [How to Write Go Code](https://golang.org/doc/code.html)
    26for proper setup. If done correctly, you should have a GOROOT and GOPATH set in the
    27environment.
    28
    29If a Go development environment is setup, one can use `go get` to install the
    30`registry` command from the current latest:
    31
    32    go get github.com/docker/distribution/cmd/registry
    33
    34The above will install the source repository into the `GOPATH`.
    35
    36Now create the directory for the registry data (this might require you to set permissions properly)
    37
    38    mkdir -p /var/lib/registry
    39
    40... or alternatively `export REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/somewhere` if you want to store data into another location.
    41
    42The `registry`
    43binary can then be run with the following:
    44
    45    $ $GOPATH/bin/registry --version
    46    $GOPATH/bin/registry github.com/docker/distribution v2.0.0-alpha.1+unknown
    47
    48> __NOTE:__ While you do not need to use `go get` to checkout the distribution
    49> project, for these build instructions to work, the project must be checked
    50> out in the correct location in the `GOPATH`. This should almost always be
    51> `$GOPATH/src/github.com/docker/distribution`.
    52
    53The registry can be run with the default config using the following
    54incantation:
    55
    56    $ $GOPATH/bin/registry serve $GOPATH/src/github.com/docker/distribution/cmd/registry/config-example.yml
    57    INFO[0000] endpoint local-5003 disabled, skipping        app.id=34bbec38-a91a-494a-9a3f-b72f9010081f version=v2.0.0-alpha.1+unknown
    58    INFO[0000] endpoint local-8083 disabled, skipping        app.id=34bbec38-a91a-494a-9a3f-b72f9010081f version=v2.0.0-alpha.1+unknown
    59    INFO[0000] listening on :5000                            app.id=34bbec38-a91a-494a-9a3f-b72f9010081f version=v2.0.0-alpha.1+unknown
    60    INFO[0000] debug server listening localhost:5001
    61
    62If it is working, one should see the above log messages.
    63
    64### Repeatable Builds
    65
    66For the full development experience, one should `cd` into
    67`$GOPATH/src/github.com/docker/distribution`. From there, the regular `go`
    68commands, such as `go test`, should work per package (please see
    69[Developing](#developing) if they don't work).
    70
    71A `Makefile` has been provided as a convenience to support repeatable builds.
    72Please install the following into `GOPATH` for it to work:
    73
    74    go get github.com/golang/lint/golint
    75
    76Once these commands are available in the `GOPATH`, run `make` to get a full
    77build:
    78
    79    $ make
    80    + clean
    81    + fmt
    82    + vet
    83    + lint
    84    + build
    85    github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar
    86    github.com/sirupsen/logrus
    87    github.com/docker/libtrust
    88    ...
    89    github.com/yvasiyarov/gorelic
    90    github.com/docker/distribution/registry/handlers
    91    github.com/docker/distribution/cmd/registry
    92    + test
    93    ...
    94    ok    github.com/docker/distribution/digest 7.875s
    95    ok    github.com/docker/distribution/manifest 0.028s
    96    ok    github.com/docker/distribution/notifications  17.322s
    97    ?     github.com/docker/distribution/registry [no test files]
    98    ok    github.com/docker/distribution/registry/api/v2  0.101s
    99    ?     github.com/docker/distribution/registry/auth  [no test files]
   100    ok    github.com/docker/distribution/registry/auth/silly  0.011s
   101    ...
   102    + /Users/sday/go/src/github.com/docker/distribution/bin/registry
   103    + /Users/sday/go/src/github.com/docker/distribution/bin/registry-api-descriptor-template
   104    + binaries
   105
   106The above provides a repeatable build using the contents of the vendor
   107directory. This includes formatting, vetting, linting, building,
   108testing and generating tagged binaries. We can verify this worked by running
   109the registry binary generated in the "./bin" directory:
   110
   111    $ ./bin/registry --version
   112    ./bin/registry github.com/docker/distribution v2.0.0-alpha.2-80-g16d8b2c.m
   113
   114### Optional build tags
   115
   116Optional [build tags](http://golang.org/pkg/go/build/) can be provided using
   117the environment variable `BUILDTAGS`.

View as plain text