2014.11.06
パワフルなdocker-registryの機能 「Search-engine/Mirroring」について
こんにちは N.Oです。本ブログにてご紹介したdocker-registry(記事:ついにバージョン 1.0 リリース!注目を集める Docker の概要と ConoHa・アプリクラウドでの利用方法など)ですが、docker-registryには他にもSearch-engine,mirroringといったパワフルな機能がありますのでご紹介したいと思います。
環境
- mac OS X mavericks
- Vagrant 1.6.5
- VirtualBox Manager 4.3.16
- Boot2Docker-cli version: v1.3.0
Search-engineオプション
Search-engineはDocker Hub APIのsearch機能を提供するものです。自分で作成しpushしたimageが検索できるようになります。残念ながらpublic repositryの検索までは対応していません。あくまでprivateで作成したimageの検索用となります。バックエンドにSQLAlcemyを採用しておりDBにMySQLも選択できますので今回はMySQLを使用してみます。
mirroringのオプションと、Search-engine用にmysqlをサポートしたdocker-registryイメージを作成します。
適当にフォルダを作成してDockerfileを作成します。仮にmyregディレクトリとします。
mkdir myreg cd myreg vi Dockerfile
Dockerfileの内容は以下となります。
FROM registry:0.8.1 RUN apt-get -y install libmysqlclient-dev RUN pip install mysql-python ENV SEARCH_BACKEND sqlalchemy # Search-engine用 ENV MIRROR_SOURCE https://registry-1.docker.io # mirroring用 ENV MIRROR_SOURCE_INDEX https://index.docker.io # mirroring用 ENV STORAGE_PATH /opt/registry
buildします
docker build -t myreg .
mysqlコンテナを作成します
docker run -d -p 3306:3306 \ --name regmysql -e MYSQL_ROOT_PASSWORD=mysecretpassword mysql
必要となるデータベース、テーブルを作成します。
mysqlクライアントはSequel Proを使用しました。
boot2dockerの場合は仮想サーバ上にportがexposeされてますので boot2docker ip
で表示されたIP:3306番に接続します。ユーザ/パスワードはroot/mysecretpasswordとなります。
mysql> create database test; mysql> use test mysql> CREATE TABLE `repository` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(95), `description` varchar(100), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; mysql> CREATE TABLE `version` ( `id` int(11) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; mysql> insert into version set id=1;
myregイメージからprivate registryコンテナを作成します。
docker run -d -p 5000:5000 \ --name myreg -v /var/tmp/registry:/opt/registry \ --link=regmysql:regmysql \ -e SQLALCHEMY_INDEX_DATABASE=mysql://root:mysecretpassword@regmysql:3306/test \ myreg
これで準備ができました。
private repositoryのpush
試しに先ほど作成したmyregイメージをpushしてみます。まずはtagをつけます。
docker tag myreg localhost:5000/orita/myreg
pushします。
docker push localhost:5000/orita/myreg
検索してみる
mysql同様、myregのportは仮想サーバにexposeされてますのでboot2docker ip
で表示されたIP:5000にリクエストを投げます。jsonでレスポンスが返ってきます。
curl '192.168.59.103:5000/v1/search?q=myreg' {"num_results": 1, "query": "myreg", "results": [{"description": "", "name": "orita/myreg"}]}
mirroringオプション
docker-registryのmirroringはどちらかというとproxyという感じでimageが無ければ取りに行くという動作ですが、透過的にpullしてくれるのでいちいちdocker hubからpullする必要はなくなります。今回のようなboot2docker上で自分しか使わないという状況ですとそれだけではあまり嬉しくないですが、private registryをLAN内に立てて複数人で使い回す際には取得済みimageが2回目からprivate registryから直接取得できるなど、多少メリットがあるかもしれません。
なお前述の通り、mirrorで取得したpublic repositoryはSearch-engineには入りませんのでご注意ください。
busyboxをリクエストしてみる
imageの指定にprivate registryのIP:portを付けてrunしてみます。「Unable to find image」の後にpullしているのが分かります。
docker run -i -t localhost:5000/busybox Unable to find image 'localhost:5000/busybox' locally Pulling repository localhost:5000/busybox e72ac664f4f0: Download complete 511136ea3c5a: Download complete df7546f9f060: Download complete e433a6c5b276: Download complete Status: Downloaded newer image for localhost:5000/busybox:latest / #
他にも気になるdocker-registry機能
他にもCacheという、Redisをcacheとして利用できる仕組み(imageやtagなどをcacheできる)もありますので、別の機会に試してみたいと思います。
次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。インフラ設計、構築経験者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。
それではまた
グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。
Follow @GMO_RD