2014.11.06

パワフルなdocker-registryの機能 「Search-engine/Mirroring」について

maxresdefault
こんにちは 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

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
  • Facebook
  • はてなブックマークに追加

グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。

 
  • AI研究開発室
  • 大阪研究開発グループ