2014年2月15日土曜日

Dockerってなんじゃ?(Docker Index レジストリ)




いままでのDockerの記事にも登場してきましたが、
Dockerにはリポジトリという概念があります。

A repository is a hosted collection of tagged images that together create the file system for a container. The repository’s name is a tag that indicates the provenance of the repository, i.e. who created it and where the original copy is located.

working with repogistry


リポジトリ


リポジトリというのはコンテナのファイルシステム(AUFS)を構成するタグ付けされたイメージのホストされた集合です。リポジトリ名は、例えば作成者とオリジナルコピーがどこにあるかなど、リポジトリの由来となるようなタグとして利用します。



レジストリ


リポジトリはレジストリ上に存在します。デフォルトではレジストリはDocker IndexというDockerがホストしているパブリックレジストリになります。Docker自身が提供しているトップレベルリポジトリもアカウント上に作られるユーザーリポジトリもあります。Docker IndexはgitでいうところのGithubのようなものになります。



アカウントを作成


Docker Indexを使うにはアカウントを作成してみます。まず、Dockerのサイトを開きます。
sign upのローカルナビのリンクをクリックするとサインアップ画面が表示されるので、情報を入力して登録します。



確認メールが届くのでアクティベーションすると、登録完了します。



マイページのAuthorized Serviceを開いてDocker Indexの「Go to application」をクリックします。



すると、Docker Index画面が開くので、ログインします。



Docker Indexの画面が表示され、自分のリポジトリ一覧画面が開かれますが、最初はなにもありません。
これからここにリポジトリをアップしてみたいと思います。




リポジトリの操作



login

いったんブラウザを離れて、コマンドライン上でDocker Indexにログインします。
ユーザー名、Eメール、パスワードを聞かれるので、先ほど登録したアカウントの情報を入力します。
# docker login
Username: memorycraft
Password:
Email: memorycraft@gmail.com
Login Succeeded

これでdockerのコマンドラインとアカウントが紐付きました。



search

最初のDocker記事で使用したcentosというリポジトリは公式のリポジトリです。
ユーザーはまず、Docker Indexレジストリ上にある公式または任意のユーザーの公開リポジトリを使用してコンテナを作っていきます。

レジストリからリポジトリを探す場合は以下のようにします。
# docker search centos
NAME                                     DESCRIPTION                                     STARS     OFFICIAL   TRUSTED
tianon/centos                            CentOS 5 and 6, created using rinse instea...   6
centos                                                                                   27
tutum/centos                             CentOS Docker image with SSH access             5
hnakamur/centos                          CentOS 6.5 x86_64 base image                    1
zwxajh/centos                            centos 6 base system.                           1
kalefranz/centos                                                                         2                    [OK]
goyalankit/centos                        Bare centos repo                                1
blalor/centos                            Bare-bones base CentOS 6.5 image                0                    [OK]
backjlack/centos                         This repository contains the following ima...   0
.......

このようにリポジトリ名などが出てきます。
(centosはDocker Index上ではオフィシャルですが、なぜかCI上だとOFFICIALに印がありません)
TRUSTEDはTrusted RepositoryというGitHubのリポジトリと連携してホストされている特殊なリポジトリです。これについてはまたの機会に触れてみたいと思います。



pull

searchで目的のリポジトリが見つかったらこれを手元に持ってきて使います。

たとえば
# docker pull centos
とすると、Dockerのレジストリからcentosリポジトリをローカルイメージとしてpullしてきます。
また、
# docker run -t -i centos /bin/bash
とすると、ローカルにある場合はローカルのcentosのイメージを、なければDockerのレジストリからcentosのリポジトリからイメージをpullして、そのままコンテナを起動します。



commit

いままでの記事にあったように、コンテナでいろいろ作業をしていくうちに、作業内容をコミットする場合があります。
コミットはコンテナをイメージに変換して保存します。その場合イメージ名は"ユーザー名/イメージ名"のようにつけます。Docker Indexのアカウントのユーザー名にしておくとDocker Indexのレジストリに登録するときにわかりやすいです。
# docker commit <container_id> <username>/<imagename>



push

pushをするとイメージをリポジトリに保存することができます。
gitのpushと同じイメージです。pushする先がデフォルトの場合、レジストリはDocker Indexに登録されます
# docker push <username>/<repo_name>


ここで、Docker Indexを見てみます。



先ほどのリポジトリ一覧に、pushしたリポジトリが1つ表示されるようになりました!

レジストリを使用することで、dockerのサーバが壊れた時の復旧や、環境を移行したり増やしたりする場合などに便利です。

今回は以上です。