2015-06-08 02:58:53 +02:00
2015-12-12 01:39:51 +01:00
# Building the registry source
2015-08-26 20:08:13 +02:00
## Use-case
This is useful if you intend to actively work on the registry.
2015-12-12 01:39:51 +01:00
### Alternatives
2015-08-26 20:08:13 +02:00
Most people should use the [official Registry docker image ](https://hub.docker.com/r/library/registry/ ).
People looking for advanced operational use cases might consider rolling their own image with a custom Dockerfile inheriting `FROM registry:2` .
2016-10-18 14:31:08 +02:00
OS 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 ).
2015-08-26 20:08:13 +02:00
### Gotchas
2015-08-28 21:46:09 +02:00
You are expected to know your way around with go & git.
2015-08-26 20:08:13 +02:00
If 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.
## Build the development environment
2015-04-02 17:11:19 +02:00
2015-07-31 14:36:43 +02:00
The first prerequisite of properly building distribution targets is to have a Go
2015-06-03 20:59:56 +02:00
development environment setup. Please follow [How to Write Go Code ](https://golang.org/doc/code.html )
for proper setup. If done correctly, you should have a GOROOT and GOPATH set in the
environment.
If a Go development environment is setup, one can use `go get` to install the
2015-08-28 21:46:09 +02:00
`registry` command from the current latest:
2015-04-02 17:11:19 +02:00
2020-08-24 13:18:39 +02:00
go get github.com/distribution/distribution/cmd/registry
2015-04-02 17:11:19 +02:00
2015-06-11 20:08:16 +02:00
The above will install the source repository into the `GOPATH` .
Now create the directory for the registry data (this might require you to set permissions properly)
2015-08-26 20:08:13 +02:00
mkdir -p /var/lib/registry
2015-06-11 20:08:16 +02:00
... or alternatively `export REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/somewhere` if you want to store data into another location.
The `registry`
2015-04-02 17:11:19 +02:00
binary can then be run with the following:
2015-10-07 12:08:13 +02:00
$ $GOPATH/bin/registry --version
2020-08-24 13:18:39 +02:00
$GOPATH/bin/registry github.com/distribution/distribution v2.0.0-alpha.1+unknown
2015-04-02 17:11:19 +02:00
2015-06-03 20:59:56 +02:00
> __NOTE:__ While you do not need to use `go get` to checkout the distribution
> project, for these build instructions to work, the project must be checked
> out in the correct location in the `GOPATH`. This should almost always be
2020-08-24 13:18:39 +02:00
> `$GOPATH/src/github.com/distribution/distribution`.
2015-06-03 20:59:56 +02:00
2015-04-02 17:11:19 +02:00
The registry can be run with the default config using the following
2015-07-31 14:36:43 +02:00
incantation:
2015-04-02 17:11:19 +02:00
2020-08-24 13:18:39 +02:00
$ $GOPATH/bin/registry serve $GOPATH/src/github.com/distribution/distribution/cmd/registry/config-example.yml
2015-08-26 20:08:13 +02:00
INFO[0000] endpoint local-5003 disabled, skipping app.id=34bbec38-a91a-494a-9a3f-b72f9010081f version=v2.0.0-alpha.1+unknown
INFO[0000] endpoint local-8083 disabled, skipping app.id=34bbec38-a91a-494a-9a3f-b72f9010081f version=v2.0.0-alpha.1+unknown
INFO[0000] listening on :5000 app.id=34bbec38-a91a-494a-9a3f-b72f9010081f version=v2.0.0-alpha.1+unknown
INFO[0000] debug server listening localhost:5001
2015-04-02 17:11:19 +02:00
If it is working, one should see the above log messages.
### Repeatable Builds
For the full development experience, one should `cd` into
2020-08-24 13:18:39 +02:00
`$GOPATH/src/github.com/distribution/distribution` . From there, the regular `go`
2015-04-02 17:11:19 +02:00
commands, such as `go test` , should work per package (please see
[Developing ](#developing ) if they don't work).
A `Makefile` has been provided as a convenience to support repeatable builds.
Please install the following into `GOPATH` for it to work:
2016-11-24 00:45:04 +01:00
go get github.com/golang/lint/golint
2015-04-02 17:11:19 +02:00
Once these commands are available in the `GOPATH` , run `make` to get a full
build:
2016-03-31 19:46:02 +02:00
$ make
2015-08-26 20:08:13 +02:00
+ clean
+ fmt
+ vet
+ lint
+ build
github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar
2017-06-23 21:45:04 +02:00
github.com/sirupsen/logrus
2015-08-26 20:08:13 +02:00
github.com/docker/libtrust
...
github.com/yvasiyarov/gorelic
2020-08-24 13:18:39 +02:00
github.com/distribution/distribution/registry/handlers
github.com/distribution/distribution/cmd/registry
2015-08-26 20:08:13 +02:00
+ test
...
2020-08-24 13:18:39 +02:00
ok github.com/distribution/distribution/digest 7.875s
ok github.com/distribution/distribution/manifest 0.028s
ok github.com/distribution/distribution/notifications 17.322s
? github.com/distribution/distribution/registry [no test files]
ok github.com/distribution/distribution/registry/api/v2 0.101s
? github.com/distribution/distribution/registry/auth [no test files]
ok github.com/distribution/distribution/registry/auth/silly 0.011s
2015-08-26 20:08:13 +02:00
...
2020-08-24 13:18:39 +02:00
+ /Users/sday/go/src/github.com/distribution/distribution/bin/registry
+ /Users/sday/go/src/github.com/distribution/distribution/bin/registry-api-descriptor-template
2015-08-26 20:08:13 +02:00
+ binaries
2015-04-02 17:11:19 +02:00
2016-11-24 00:45:04 +01:00
The above provides a repeatable build using the contents of the vendor
directory. This includes formatting, vetting, linting, building,
2015-04-02 17:11:19 +02:00
testing and generating tagged binaries. We can verify this worked by running
the registry binary generated in the "./bin" directory:
2018-02-27 23:46:06 +01:00
$ ./bin/registry --version
2020-08-24 13:18:39 +02:00
./bin/registry github.com/distribution/distribution v2.0.0-alpha.2-80-g16d8b2c.m
2015-04-02 17:11:19 +02:00
2015-04-23 18:13:52 +02:00
### Optional build tags
Optional [build tags ](http://golang.org/pkg/go/build/ ) can be provided using
the environment variable `DOCKER_BUILDTAGS` .