いままでの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のサーバが壊れた時の復旧や、環境を移行したり増やしたりする場合などに便利です。
今回は以上です。