はじめに
今ではDocker HUBもプライベートで登録できますが、クラウドに大切なデータを置きたくないという企業ユーザーもまだ多いと思います。そんな時こそ、プライベートリポジトリを使うのかな〜と思うのですが、これがイマイチ使いにくいように思います。 Dockerクライアントには、imagesやcontainersを登録・削除したり詳細を表示する方法が存在していますが、Private Registryにはその方法がないし、自分だけで使うしかないのか〜というところが背景です。次善策
と言ったものの、色々と探すと、全くない訳ではありませんでした。 http://docs.docker.com/reference/api/docker_remote_api/ 上記にあるAPIを利用する方法です。Private Registry専用という訳ではないのでしょうが、ホスト名・ポート番号で利用できるという点で、この用途での利用も想定されていると思われます。(上記ドキュメントでも記載されているけれど、デフォルトのdockerデーモンはAF_UNIXを使っているしね。) そこで、以下のようなスクリプトを.bashrcとかに入れておきます。.bashrc
rdock()
{
if [ $# -lt 1 ]; then
echo usage : rdock host
return
fi
local hname
hname=$1
curl -s -X GET http://$hname/v1/search | tr '"' '\n' | grep library | cut -b 9-
}
$ rdock hostname:5000
centos
jpetazzo/nsenter
と、こんな感じにPrivate Registryに入っているimageを取得する事ができるので、それを元に、dockerクライアントを利用してcontainerを作る事ができわけです。
そこで、あと一歩
まぁ、自分一人ならこれでも良いけど、チーム内とかで利用するとなれば、ブラウザとかで参照できた方が良いよね。さらに、誰かが作成したimageがどんなもので、どう利用するかといった情報がないと使いにくいかなと思う訳です。Docker HUBでも色々と付加情報を追加できるしね。https://github.com/0bara/docker-registry-ui
ちょっと、いや、かなり、laravelを使っている意味がないような実装をしてしまっていて、あれな感じなのですが、時間があれば、もう少しそれっぽくしたいと考えていますが、とりあえず感満載ですw
上記を利用して、せっかくなので、dockerで動作するようにしてみました。それが、以下にあるDockerfileです。
https://github.com/0bara/docker-registry-websystem
準備
Private Registry
まずは、Private Registryを作っておいてください。これについては、色々と記事になっているので、それを参考にしていただく事にします。基本は以下で良いのですが、containerイメージ格納エリアをホスト側に用意した方が良いです。$ sudo docker run -d -p 5000:5000 samalba/docker-registry
起動
$ git clone https://github.com/0bara/docker-registry-websystem.git $ sudo docker build -t drwsys:1.0 docker-registry-websystem $ sudo docker run -p 8080:80 -d drwsys:1.0proxy
apache httpdの場合の設定/etc/httpd/conf.d/srv.conf
$ cat /etc/httpd/conf.d/srv.conf
ProxyPass /repo http://localhost:8080/
<Location /repo/>
# mod_proxy_html
ProxyPassReverse https://localhost:8080/
RequestHeader unset Accept-Encoding
ProxyPassReverseCookiePath / /repo/
</Location>
上記の設定により、http://hostname/repo/ でアクセスできるようになります。
firewall
ローカル Registryにアクセスする為のポートを開ける必要があります。これに関しては具体的な方法は各自ご確認ください。使い方
表示するだけなら、ブラウザで「 http://hostname/repo/ 」のURLにアクセスすればよい。各イメージ名、タグごとにTitle/Descriptionを設定可能としている。Title/Descriptラベルの右側領域をタップすると、入力可能なテキストが表示される。最後に
今のところ、使い勝手としては、それほど良くないとは思いますw 登録内容が増加した時に検索ができないなど色々と改善点がありますが、ご容赦を。 また、既に同様のものがあれば教えてください。「プライベートリポジトリ」って表現はおかしいので修正しました(照