Docker Hub と連携する - Docker User Guide


# Docker Hub と連携する

Working with Docker Hub - Docker Documentation
http://docs.docker.com/userguide/dockerrepos/

これまで、ローカルホストで Docker を実行するために、コマンドラインを使用する方法を学びました。コンテナを既存のイメージから作り上げるために、イメージを pull down する方法を学びました。そして、自分自身のイメージをつくる方法を学んできています。

次は、Docker の作業手順（ワークフロー）を簡単かつ拡張するために [Docker Hub](https://hub.docker.com/) を使う方法を学びましょう。

Docker Hub は、公開レジストリであり、Docker 社によって管理されています。そこにはダウンロード可能で、コンテナとして構築可能な 15,000 以上のイメージがあります。また、認証、作業グループ向けの環境、webhooks のような作業手順（ワークフロー）ツール、build trigger、そして、公に共有したくないイメージを格納するプライベートリポジトリといったプライバシーツールを提供しています。

## Docker コマンドと Docker Hub

Docker は、自分自身で Docker Hub サーバに `docker search`、`pull`、`login`、`push` コマンドで接続する機能を提供します。

### アカウント作成とログイン

例によって、[Docker Hub](https://hub.docker.com/account/signup/) を使いたい場合は、（未作成であれば）アカウントを作成し、ログインします。Docker Hub に直接アクセスするには、次のように実行します。

```
$ sudo docker login
```

ここのプロンプトでは、ユーザ名、これは自分の公開レポジトリで表示されることになる公開名称を入力します。もし、名前が利用可能であれば、Docker はパスワードとメールアドレス入力を促すプロンプトを表示します。あとは、自動的にログインします。これで、自分自身のイメージや Docker Hub レポジトリにあるファイルのコミットやプッシュが出来るようになります。

注：自分の認証証明書は、自分のホームディレクトリの `.dockercfg` [認証ファイル](http://docs.docker.com/userguide/dockerrepos/#authentication-file)に保管されます。

## イメージの検索

コマンドライン・インターフェースの検索インターフェースを通し、[Docker Hub](https://hub.docker.com/) レジストリの検索を行う事ができます。イメージ名やユーザー名、あるいは説明文でイメージを検索することができます。

```
$ sudo docker search centos
NAME           DESCRIPTION                                     STARS     OFFICIAL   TRUSTED
centos         Official CentOS 6 Image as of 12 April 2014     88
tianon/centos  CentOS 5 and 6, created using rinse instea...   21
...
```

ここで `centos` と `tianon/centos` ２つのサンプル結果が見えるとします。２つめの結果として表示されるのは、`tianon/` という名前の公開レポジトリの結果です。１つめの `centos` は、信頼されたトップレベルの名前空間で提供されているレポジトリであるものとして、明確に示すものです。文字 `/` は、ユーザのレポジトリと、イメージ名称を分離するものです。

欲しいイメージが見つかったら、それらは `docker pull <イメージ名>` コマンドでダウンロードすることが出来ます。

```
$ sudo docker pull centos
Pulling repository centos
0b443ba03958: Download complete
539c0211cd76: Download complete
511136ea3c5a: Download complete
7064731afe90: Download complete
```

これでイメージが手元にありますので、コンテナを起動することができます。

## Docker Hub への貢献

誰でも Docker Hub レポジトリから公開イメージを取得 (pull) できますが、もし自分自身のイメージを共有したいのであれば、一番始めに登録を行い、 [Docker User Guide の始めのセクション](http://docs.docker.com/userguide/dockerhub/)を見て下さい。

## Docker Hub にレポジトリを送信(push)する

レジストリにレポジトリをプッシュしたい場合は、イメージ名かコミットされたコンテナ名称を、（[これまで](http://docs.docker.com/userguide/dockerimages)見て来たように）付ける必要があります。

これでこのレポジトリを、自身の名前かタグで指定したものに登録が出来ます。

```
$ sudo docker push yourname/newimage
```

イメージがアップロードされたら、ユーザのチームメイトやコミュニティが利用可能になります。

## Docker Hub の機能

それでは Docker Hub の機能については、より詳細な観察をしましょう。より詳しい情報は、[こちら](http://docs.docker.com/docker-hub/)から確認できます。

* プライベートレポジトリ
* 組織やチーム
* 自動ビルド
* ウェブ・フック(webhook)

### プライベートレポジトリ

時々、持っているイメージを公開し、誰にでも共有したくないときがあるでしょう。そこで Docker Hub は、プライベートレポジトリを提供しています。[こちら](https://registry.hub.docker.com/plans/)からサインアップして検討してくだい。

### 組織とチーム

プライベートレポジトリの使いやすい面としては、特定の組織やチームのメンバーとのみ共有出来る点です。Docker Hub では organization (組織) をつくることができ、そこでは同僚とコラボレートしたり、プライベートリポジトリの管理を行う事ができます。どのように organization を作って管理するかは、こちらのページから学ぶことができます。

## 自動ビルド (Automated Builds)

Automated Build は、[Github](https://www.github.com/) や [BitBucket](http://bitbucket.com/) にあるイメージの更新があれば、Docker Hub が直接、自動的にビルド（構築）することができます。この動きは、commit を選択した GitHub や BitBucket レポジトリをフックし、commit を push すると、構築や更新のトリガとするものです。

自動ビルドのセットアップ

1. [Docker Hub アカウント](https://hub.docker.com/)の作成とログイン
2. GitHub か BitBucket アカウントを、["Link Accounts"](https://registry.hub.docker.com/account/accounts/) メニューからリンクする
3. Automate Build （自動ビルド）の設定を行う
4. `Dockerfile` で GitHub か BitBucket のプロジェクトを扱う
5. ビルドしたいブランチを拾う（デフォルトでは `master` ブランチ）
6. 自動ビルド名を決める
7. オプションで構築したい Docker タグを割り当てる
8. `Dockerfile` の場所を割り当てる、デフォルトは `/`

自動ビルドの設定を一度行っておけば、ビルドをトリガとして数分後に自動構築が始まります。自動ビルドの状態は、Docker Hub Registry 上で見る事ができます。GitHub や BitBucket レポジトリの同期が終わるまで、自動ビルドを無効化する事はできません。

もし、自動ビルドの状況を確認したければ、Docker Hub の [Automated Build page](https://registry.hub.docker.com/builds/) を確認して、ビルド状態や、ビルドの履歴を確認することができます。

自動ビルドが完了してしまえば、自動ビルドの無効化や削除を行えます。しかしながら、`docker push` コマンドを自動ビルド時には使う事ができません。あくまでも、コードは GitHub か BitBucket のレポジトリ上に対してコミットすることで、管理することができます。

複数の自動ビルドをレポジトリ毎に行いたい場合は、`Dockerfile` や Git ブランチを使って設定して下さい。

#### ビルドのトリガ

自動ビルドは Docker Hub の URL を経由したトリガを指定することもできます。この方法を使えば、必要に応じて自動的に構築させることができます。

### ウェブフック(Webhooks)

ウェブフック(webhooks)は、レポジトリに取り付け、イメージのイベントやイメージ更新をトリガとしてレポジトリに送信(push)するものです。ウェブフックでターゲットの URL を指定し、JSON でデータを送ることにより、イメージが送信(push)されたとき、自動的に処理されます。

## 次のステップ

Docker を使いましょう！