レジストリをソースからビルド¶
使用例¶
レジストリを活用したい場合に役立ちます。
あるいは¶
多くの皆さんは 公式 Registry Docker イメージ を使ったほうが良いでしょう。
高度な使い方を考えている皆さんであれば、 FROM registry:2
以降の Dockerfile をカスタマイズし、自分でイメージを作成したいと考えているかもしれません。
OS X ユーザであれば こちらの手順 をご覧ください。
開発環境の構築¶
まず、利用環境に対して適切な Go 開発環境をセットアップする必要があります。適切なセットアップ方法は Goコードの書き方(英語) をご覧ください。正しく終わったら、環境変数の GOROOT と GOPATH が設定されているでしょう。
Go 開発環境をセットアップしたら、 go get
コマンドを使って最新バージョンの registry
をインストールします。
go get github.com/docker/distribution/cmd/registry
ソース・リポジトリから GOPATH
にインストールします。
次にレジストリ・データ用のディレクトリを作成します(パーミッションを適切に設定する必要があるでしょう)。
あるいは別の場所に保管したい場合は export REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/somewhere
を実行します。
レジストリのバイナリを以下の場所に設置します。
$ $GOPATH/bin/registry --version
$GOPATH/bin/registry github.com/docker/distribution v2.0.0-alpha.1+unknown
注釈
プロジェクトから go get
でチェックアウトしなくても、ビルド手順は動くするでしょう。しかし、 GOPATH
の適切な場所にプロジェクトがなければチェックアウトできません。通常は $GOPATH/src/github.com/docker/distribution
です。
次の定型コマンドを実行すると、レジストリは標準のオプションで起動します。
$ $GOPATH/bin/registry $GOPATH/src/github.com/docker/distribution/cmd/registry/config-example.yml
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
動作しない場合は、ログメッセージの内容を確認すべきです。
ビルドを繰り返す¶
完全な開発経験のためには、 cd
で $GOPATH/src/github.com/docker/distribution
に移動すべきです。ここから go test
のような通常の go
コマンドを実行しても、パッケージが動くでしょう。動かない場合は レジストリの開発 をご覧ください。
繰り返しのビルドが便利になるように Makefile
が提供されています。動作するためには GOPATH
にインストールします。
go get github.com/tools/godep github.com/golang/lint/golint
TODO(原文ママ) make setup
コマンドを Makefile の実行時に追加。Godeps が適切に働くか考慮する必要がある。
GOPATH
でコマンドが実行可能であれば、 make
によってビルドできます。
$ GOPATH=`godep path`:$GOPATH make
+ clean
+ fmt
+ vet
+ lint
+ build
github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar
github.com/Sirupsen/logrus
github.com/docker/libtrust
...
github.com/yvasiyarov/gorelic
github.com/docker/distribution/registry/handlers
github.com/docker/distribution/cmd/registry
+ test
...
ok github.com/docker/distribution/digest 7.875s
ok github.com/docker/distribution/manifest 0.028s
ok github.com/docker/distribution/notifications 17.322s
? github.com/docker/distribution/registry [no test files]
ok github.com/docker/distribution/registry/api/v2 0.101s
? github.com/docker/distribution/registry/auth [no test files]
ok github.com/docker/distribution/registry/auth/silly 0.011s
...
+ /Users/sday/go/src/github.com/docker/distribution/bin/registry
+ /Users/sday/go/src/github.com/docker/distribution/bin/registry-api-descriptor-template
+ binaries
これは Godeps の指定したディレクトリでビルドする度に表示されるでしょう。ここには formatting 、 vetting 、 linting 、 building 、 testing 、generating とタグ付けされたバイナリが作成されています。生成されたバイナリが実行可能か確認するには ./bin
ディレクトリに移動します。
$ ./bin/registry -version
./bin/registry github.com/docker/distribution v2.0.0-alpha.2-80-g16d8b2c.m
レジストリの開発¶
上記の手法は小さな実験に役立つでしょう。より複雑なタスクをこなしたい場合は godep
の力を使うことを推奨します。
Makefile は外部の定義 GOPATH
に依存するよう設計されています。これは様々な環境にセットアップできるようにするためです。便利なのは、主にアップストリームのバグ修正のため、ローカルのコードを変更する場合です。そのためには godep
を移行して GOPATH
の依存関係を解決する必要があります。 Godeps
の GOPATH
にある現在の依存関係を解消するには、次のコマンドを実行します。
godep restore
警告
このコマンドは Godeps/Godeps.json で指定されたコードに対してチェックアウトすると GOPATH
の中にあるファイルを編集します。そうしたくない場合は、分岐したプロジェクトで使うため、別のワークスペースを作成することを推奨します。
上記のコマンドに成功すると、 GOPATH
を指定せず make
します。
make
成功すると go test
のような通常の go
コマンドをパッケージごとに実行しても、問題無く動作するでしょう。
build tag のオプション¶
オプションの build tags は環境変数 DOCKER_BUILDTAGS
で指定できます。
Ceph RADOS ストレージ・ドライバ を有効にするには( librados-dev と librdb-dev がビルド時に必要となります)、次のように実行します。
export DOCKER_BUILDTAGS='include_rados'
参考
- Building the registry source
- https://docs.docker.com/registry/building/