Docker Hub にイメージを保管する¶
これまではローカル・ホスト上の Docker を、コマンドラインで操作する方法を学びました。 イメージを取得 し、既存のイメージからコンテナを構築する方法と、 自分自身でイメージを作成する 方法を学びました。
次は Docker Hub を簡単に使い、Docker のワークフローを拡張しましょう。
Docker Hub は Docker 社が管理する公開(パブリックな)レジストリです。ここには、ダウンロードしてコンテナ構築に使えるイメージが置かれています。また、自動化や、ワークグループの仕組み、ウェブフック(webhooks)や構築トリガ(build triggers)のようなワークフロー・ツール、一般には共有したくないイメージを保管するプライベート・レポジトリのようなプライバシー・ツールを提供します。
Docker コマンドと Docker Hub¶
Docker は、自分自身が Docker Hub のサービスに docker search
、 pull
、 login
、 push
コマンドを通して接続する機能を提供します。
アカウントの作成とログイン¶
例によって、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
...
ここでは centos
と tianon/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
を使います。この例では、 centos5
が centos
レポジトリにおける 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)とは、 GItHub や Bitbucket のイメージが更新されると、Docker Hub が直接、構築や更新をします。これは、選択した GitHub か Bitbucket レポジトリに対するコミットをきっかけ(フック)とするもので、コミットをプッシュ(push)したのをトリガとして構築・更新を行います。
自動構築のセットアップ¶
- Docker Hub アカウント を作成してログインします。
- Linked Accounts & Services (アカウントとサービスのリンク)から自分の GitHub もしくは Bitbucket アカウントをリンクします。
- 自動構築の設定 を行います。
- 選択した GitHub もしくは BitHubket プロジェクト上で、構築内容を
Dockerfile
にまとめます。 - 必要があれば構築時のブランチを指定します(デフォルトは
master
ブランチです)。 - 自動構築名を指定します。
- 構築時に追加するオプションの Docker タグを指定します。
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 を使いましょう!