環境
- MacOSX Yosemite
- docker 1.9.1
- docker-compose 1.5.2
- docker-machine 0.5.2
概要
簡単にprivate registryを立てれる環境が欲しかったので、作ってみました。
リポジトリはこちらになります。
認証つきprivate registry
dockerはデフォルトだとHTTPSで通信を行うのですが、SSLの証明書を作成したりプロキシサーバを立てたりするのが面倒でした。
また、認証や権限周りの設定を一からやっていくのもめんどくさい……。
というわけで、こちらのimageを利用することに。
https://github.com/cesanta/docker_auth#installation-and-examples
docker_auth
概要はリポジトリのREADMEを読んでもらえれば雰囲気がわかるかと。
また、こちらの記事が非常にわかりやすかったです。
https://the.binbashtheory.com/creating-private-docker-registry-2-0-with-token-authentication-service/
リポジトリ
リポジトリの中身は、docker_authとprivate registryを docker-compose up
で立ち上げられるようにしたものです。
クイックスタート
READMEを読んでもらえばわかると思いますが一応。
git clone
$ git clone https://github.com/yuemori/docker-registry-auth
$ cd docker-registry-auth
SSL証明書の作成
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.pem
$ mkdir ssl
$ mv server* ssl
auth_config.ymlの編集
こちらを参考に、設定を変更してください。
$ vi config/auth_config.yml
insecure-registryの設定
insecure-registry
は指定したホストとHTTP通信でregistryと通信するためのオプションです。
以下はdocker-machineの例です(CentOSとUbuntuの場合はREADMEに書いてありますが未検証です)。
my-registry
の部分は立ち上げたホストのアドレスを入れてください。
docker-machineを使っている場合は、docker-machine ip hogehoge
でIPアドレスを調べましょう。
$ docker-machine ssh default "echo $'EXTRA_ARGS=\"--insecure-registry my-registry:5000\"' | sudo tee -a /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"
起動
$ docker-compose up
デーモンで起動する場合は -d
をつけましょう。
ログイン
$ docker login my-registry:5000
Username:
Password:
Email:
ログインが成功すると、 $HOME/.docker/config.json
に認証情報が保存されます。
push
とりあえず、公式のruby imageをpullしてpushする例。
$ docker pull ruby:2.2.3
$ docker tag ruby:2.2.3 my-registry:5000/ruby:2.2.3
$ docker push my-registry:5000/ruby:2.2.3
search
$ docker search my-registry:5000/ruby
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
library/ruby 0
pull
$ docker pull my-registry:5000/ruby:2.2.3
private registryのバージョンについて
private registryは現在v1とv2があります。
推奨はv2ですが、v2は docker search
をサポートしていないのがネックだったりします。
リポジトリの docker-compose.yml
にはlatest(v1)を指定してあるので、お好みで変えてください。
まとめ
globalなところにprivate registryを置く場合でも、認証があれば安心ですね。
docker_auth
を使えば権限も細かく設定できるので、開発の際などに活用できそうです。
一方で、認証の遅さなどが気になる場合はやはりnginxなどをフロントに立てた方が良いかもしれません。