イメージをDocker Hubに保管¶
これまではローカル・ホスト上の Docker を、コマンドラインで操作する方法を学びました。 イメージを取得 し、既存のイメージからコンテナを構築する方法と、 自分自身でイメージを作成する 方法を学びました。
次は Docker Hub を簡単に使う方法を学び、Docker のワークフローを拡張しましょう。
Docker Hub は Docker 社が管理する公開(パブリックな)レジストリです。ここには、ダウンロードしてコンテナ構築に使えるイメージが置かれています。また、自動化や、ワークグループの仕組み、ウェブフック(webhook)や構築トリガ(build trigger)のようなワークフロー・ツール、一般には共有したくないイメージを保管するプライベート・リポジトリのようなプライバシー・ツールを提供します。
Docker コマンドと Docker Hub¶
Docker Hub が提供するサービスには、 Docker 自身が docker search
、 pull
、 login
、 push
コマンドを通して接続する機能があります。ここではコマンドの働きを見ていきましょう。
アカウントの作成とログイン¶
例によって、Docker Hub を使い始めるには(未作成であれば)アカウントを作成し、ログインします。アカウントの作成は Docker Hub 上で 行えます。
$ docker login
これでコミットしたイメージを、自分の Docker Hub リポジトリ上に、アップロード(push)できます。
注釈
自分の認証に関する情報は、自分のホームディレクトリの /.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
を使います。この例では、 centos
リポジトリにおける centos
のバージョンを、タグ centos5
でラベル付けしたイメージを指定しています。
リポジトリにおいて現在利用可能なタグの一覧を確認するには、 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 (アカウントのリンク)から自分の GitHub もしくは Bitbucket アカウントをリンクします。
Create Repository (リポジトリの作成)からリポジトリを作成します。
リポジトリの Builds から Configure Automated Builds を選択し自動構築の設定をします。
選択した GitHub もしくは Bitbucket プロジェクト上で、構築内容を
Dockerfile
にまとめます。必要があれば構築時のブランチを指定します(デフォルトは
master
ブランチです)。自動構築名を指定します。
構築時に追加するオプションの Docker タグを指定します。
Dockerfile
の場所を指定します。デフォルトは/
です。
自動構築の設定を有効化しておけば、ビルドをトリガとして数分後に自動構築が開始します。自動ビルドの状態は Docker Hub レジストリ上で見られます。GitHub や Bitbucket リポジトリの同期が終わるまで、自動ビルドを無効化できません。
リポジトリの自動構築状態や出力を確認したい場合は、自分の リポジトリ一覧ページ に移動し、対象のリポジトリ名をクリックします。自動構築が有効な場合は、リポジトリ名の下に "automated build" と表示されます。リポジトリの詳細ページに移動し、"Build details" タブをクリックしたら、Docker Hub 上における構築状態や、全ての構築トリガが表示されます。
自動構築が完了したら、無効化や設定の削除が可能になります。ここで注意すべきは、docker push
コマンドを使って送信しても、自動構築を行わない点です。自動構築の管理対象は、あくまでも GitHub と Bitbucket リポジトリに対してコードをコミットした時のみです。
リポジトリごとに複数の自動構築設定や、特定の Dockerfile や Git ブランチの指定も可能です。
構築のトリガ¶
Docker Hub の URL を経由しても、自動構築のトリガにできます。これにより、イメージを必要に応じて自動的に再構築することが可能です。
ウェブフック¶
ウェブフック(webhook)とは、リポジトリに対して設定します。トリガとなるのは、イメージに対するイベントの発生や、更新されたイメージがリポジトリに送信された時です。ウェブフックは特定の URL と JSON ペイロードで指定でき、イメージが送信(push)されると適用されます。
ウェブフックの詳細 については、Docker Hub のドキュメントをご覧ください。
次のステップ¶
さぁ Docker を使いましょう!
参考
- Store images on Docker Hub
https://docs.docker.com/engine/userguide/containers/dockerrepos/