Docker Hub にイメージを保管する

これまではローカル・ホスト上の Docker を、コマンドラインで操作する方法を学びました。 イメージを取得 し、既存のイメージからコンテナを構築する方法と、 自分自身でイメージを作成する 方法を学びました。

次は Docker Hub を簡単に使い、Docker のワークフローを拡張しましょう。

Docker Hub は Docker 社が管理する公開(パブリックな)レジストリです。ここには、ダウンロードしてコンテナ構築に使えるイメージが置かれています。また、自動化や、ワークグループの仕組み、ウェブフック(webhooks)や構築トリガ(build triggers)のようなワークフロー・ツール、一般には共有したくないイメージを保管するプライベート・レポジトリのようなプライバシー・ツールを提供します。

Docker コマンドと Docker Hub

Docker は、自分自身が Docker Hub のサービスに docker searchpullloginpush コマンドを通して接続する機能を提供します。

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

例によって、Docker Hub を使い始めるには(未作成であれば)アカウントを作成し、ログインします。 Docker Hub 上で アカウントを作成するか、次のように実行します。

$ docker login

このプロンプトでは、ユーザ名を入力します。これは、公開の名前空間(ネームスペース)であり、自分の公開レポジトリとして表示します。もしユーザ名が利用可能であれば、Docker はパスワードとメールアドレスの入力を促すプロンプトを表示します。あとは、自動的にログインします。あとは、自分自身のイメージのコミットや、Docker Hub 上の自分のレポジトリにイメージを送信できます。

注釈

自分の認証に関する情報は、自分のホームディレクトリの /.docker/config.json に保管されます。

イメージの検索

(ブラウザの)検索インターフェースかコマンドライン・インターフェースを通して、 Docker Hub レジストリを検索できます。イメージの検索は、イメージ名、ユーザ名、説明文に対して可能です。

$ docker search centos
NAME           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos         The official build of CentOS                    1223      [OK]
tianon/centos  CentOS 5 and 6, created using rinse instea...   33
...

ここでは centostianon/centos という、2つの結果が表示されました。後者は tianon/ という名前のユーザによるパブリック・ポジトリです。1つめの結果 centos とは明確に異なったレポジトリです。1つめの centos は、 公式レポジトリ としての信頼されるべきトップ・レベルの名前空間です。文字列 / により、イメージ名とユーザのレポジトリ名を区別します。

欲しいイメージが見つかれば、 docker pull <イメージ名> によってダウンロードできます。

$ docker pull centos
Using default tag: latest
latest: Pulling from library/centos
f1b10cd84249: Pull complete
c852f6d61e65: Pull complete
7322fbe74aa5: Pull complete
Digest: sha256:90305c9112250c7e3746425477f1c4ef112b03b4abe78c612e092037bfecc3b7
Status: Downloaded newer image for centos:latest

これで、この入手したイメージをから、コンテナを実行可能です。

バージョンの指定と最新版

docker pull centos の実行は、docker pull centos:latest の実行と同等です。イメージを取得するにあたり、標準の最新(latest)イメージをダウンロードするのではなく、より適切なイメージを正確に指定可能です。

例えば、 centos のバージョン 5 を取得するには、docker pull centos:centos5 を使います。この例では、 centos5centos レポジトリにおける centos のバージョンのイメージを、タグでラベル付けしたものです。

レポジトリにおいて現在利用可能なタグの一覧を確認するには、 Docker Hub レジストリをご覧ください。

Docker Hub への貢献

誰でも Docker Hub レジストリから公開イメージを取得(pull)できますが、自分自身のレジストリをイメージを共有したい場合、まず登録が必要です。

Docker Hub にレポジトリの送信

レポジトリを対象のレジストリに送信(push)するためには、イメージに名前を付けるか、 こちら で見たように、コンテナにイメージ名をつけてコミットする必要があります。

それからこのレポジトリを、レジストリが表す名前やタグで送信できます。

$ docker push yourname/newimage

対象のイメージをアップロードすると、あなたの同僚やコミュニティにおいても利用可能になります。

Docker Hub の機能

それでは、Docker Hub のいくつかの機能について、詳細をみていきましょう。より詳しい情報は こちら からご覧いただけます。

  • プライベート・レポジトリ
  • 組織とチーム
  • 自動構築
  • ウェブフック

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

イメージを一般公開せず、だれとも共有したくない場合があります。そのような時は Docker Hub のプライベート・レポジトリが利用出来ます。サインアップや料金プランは、 こちらを ご覧ください。

組織とチーム

プライベート・レポジトリの便利な機能の1つは、組織やチームにおける特定メンバーとのみ共有することです。Docker Hub 上で組織(organization)を作り、同僚と協力しながらプライベート・レポジトリの管理が可能です。組織の作成や管理方法については こちら をご覧ください。

自動構築

自動構築(Automated Build)とは、 GItHubBitbucket のイメージが更新されると、Docker Hub が直接、構築や更新をします。これは、選択した GitHub か Bitbucket レポジトリに対するコミットをきっかけ(フック)とするもので、コミットをプッシュ(push)したのをトリガとして構築・更新を行います。

自動構築のセットアップ

  1. Docker Hub アカウント を作成してログインします。
  2. Linked Accounts & Services (アカウントとサービスのリンク)から自分の GitHub もしくは Bitbucket アカウントをリンクします。
  3. 自動構築の設定 を行います。
  4. 選択した GitHub もしくは BitHubket プロジェクト上で、構築内容を Dockerfile にまとめます。
  5. 必要があれば構築時のブランチを指定します(デフォルトは master ブランチです)。
  6. 自動構築名を指定します。
  7. 構築時に追加するオプションの Docker タグを指定します。
  8. Dockerfile の場所を指定します。デフォルトは / です。

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

レポジトリの自動構築状態や出力を確認したい場合は、自分の レポジトリ一覧ページ に移動し、対象のレポジトリ名をクリックします。自動構築が有効な場合は、レポジトリ名の下に “automated build” と表示されます。レポジトリの詳細ページに移動し、”Build details” タブをクリックすると、Docker Hub 上における構築状態や、全ての構築トリガが表示されます。

自動構築が完了すると、無効化や設定の削除が可能になります。ここで注意すべきは、docker push コマンドを使って push しても、自動構築を行いません。自動構築の管理対象は、あくまでも GitHub と Bitbucket レポジトリに対してコードをコミットした時のみです。

レポジトリ毎に複数の自動構築を設定したり、特定の Dockerfile や Git ブランチの指定も可能です。

構築のトリガ

Docker Hub の URL を経由しても、自動構築のトリガにできます。これにより、イメージを必要に応じて自動的に再構築することが可能です。

ウェブフック

ウェブフック(webhook)とは、レポジトリに対して設定するものです。トリガとなるのは、イメージに対するイベントの発生や、更新されたイメージがレポジトリに送信された時です。ウェブフックは特定の URL と JSON ペイロードで指定でき、イメージが送信(push)されると適用されます。

ウェブフックの詳細 については、Docker Hub のドキュメントをご覧ください。

次のステップ

さぁ Docker を使いましょう!