自分の Docker Hub レジストリ

Docker Hub レポジトリは自分のイメージを同僚や顧客と共有するだけでなく、世界中の Docker コミュニティに対して公開します。イメージと内部向けに構築している場合、自分の Docker デーモンか自分たちの継続的インテグレーション・サービスを使い、Docker Hub レポジトリにイメージを送信するでしょう。このとき、Docker Hub のユーザもしくは組織のアカウントで追加できます。

あるいは、Docker イメージのソース・コードが GitHub か Bitbucket に置かれているなら、「自動構築(Automated build)」レポジトリが使えます。これは Docker Hub サービスによって自動構築されるものです。これらのサービスが提供する更なる機能については、 自動構築のドキュメント をご覧ください。

レポジトリ

イメージの検索

Docker Hub レジストリは、検索用インターフェースかコマンドライン・インターフェースを使って検索出来ます。検索は、イメージ名、ユーザ名、説明に対して行えます。

$ docker search centos
NAME                                 DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                               The official build of CentOS.                   1034      [OK]
ansible/centos7-ansible              Ansible on Centos7                              43                   [OK]
tutum/centos                         Centos image with SSH access. For the root...   13                   [OK]
...

centosansible/centos7-ansible という、2種類の結果が表示されました。1番目の centos にはレポジトリ名がありません。つまり、これは 公式レポジトリ 向けのトップ・レベル名前空間を意味します。2番目の結果は、 ansible/ という公開レポジトリ名のユーザによるものです。文字 / によって、ユーザのレポジトリ名とイメージ名を分けています。

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

$ docker pull centos
latest: Pulling from centos
6941bfcbbfca: Pull complete
41459f052977: Pull complete
fd44297e2ddb: Already exists
centos:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:d601d3b928eb2954653c59e65862aabb31edefa868bd5148a41fa45004c12288
Status: Downloaded newer image for centos:latest

イメージを手に入れた後は、コンテナを実行できます。

レポジトリ・タグの表示

Docker Hub のレポジトリで「Tags」を表示すると、利用可能なタグや関連づけられるイメージの容量が表示されます。

イメージ容量とは、イメージや親イメージの累積容量です。またこの容量は、イメージを docker save で中身を tar ファイル化したときの容量もあります。

タグの一覧

Docker Hub 上に新しいレポジトリを作成

Docker Hub ユーザを作成すると、「Get started with Docker Hub」画面が表示されます。ここから「Create Repository」(レポジトリの作成)をクリックします。あるいは「Create ▼」メニューから「Create Repository」を選びます。

新しいレポジトリを作成すると、アカウントの名前空間をそこに使うか、あるいは 組織 の指定でチームが「所有」するかを選べます。レポジトリ名はユニークな名前空間である必要があり、2文字から255文字までの小文字・数字・ -_ が利用できます。

「Short Description」(短い説明)の100文字は、検索結果に表示されます。「Full Description」(全ての説明)はレポジトリの Readme に表示されるもので、マークダウンを使って書式を追加できます。

「Create」ボタンを実行した後、 docker push コマンドでイメージを Docker Hub レポジトリに送信する必要があります。

レポジトリのイメージを Docker Hub に送信

Docker Hub にレポジトリを送信するには、自分のローカル・イメージが Docker Hub のユーザ名を使い、かつ、そのレポジトリ名は前のステップで作成したものである必要があります。これはイメージに対して :<タグ> を追加することで、レポジトリに複数のイメージを追加できます(例: docs/base::testing )。もし指定されなければ、デフォルトのタグは latest になります。ローカルのイメージに名前を付けるには、 docker build -t <Docker Hub ユーザ名>/<レポジトリ名>[:<タグ>] の形式になるよう既存のローカル・イメージを docker tag <既存イメージ> <docker Hub ユーザ名>/<レポジトリ名>[:<タグ>] で再度タグ付けします。あるいは、 docker commit <既存のコンテナ名> <Docker Hub ユーザ名>/<レポジトリ名>[:<タグ>] でコミットを変更します。詳細については Docker イメージの働き をご覧ください。

これで任意のレジストリに対し、このレポジトリを名前かタグで送信(push)できます。

$ docker push <hub-user>/<repo-name>:<tag>

イメージのアップロードが完了すると、チームメイトが、あるいはコミュニティでも利用可能になります。

スター

レポジトリはスターされることができ、あなたがお返しにレポジトリをスターすることもできます。スターはあなたが好きなレポジトリを公開する手法です。また、好きなものをブックマークするのにも簡単な方法です。

コメント

レポジトリにコメントを残すことで、Docker コミュニティの他のメンバやメンテナと、やりとりできます。適切ではないコメントがあれば、削除用のフラグも付けられます。

コラボレータとロール

コラボレータ(collaborator)とは、プライベート・レポジトリに対するアクセスを与えたい人です。かつてはレポジトリに対して pushpull するために設計されました。コラボレータはレポジトリの削除といった管理用のタスクは行えず、プライベートからパブリックにステータスの変更もできません。

注釈

コラボレータは他のコラボレータを追加できません。レポジトリの所有者のみが、管理アクセスを持っています。

また、Docker Hub を組織やチームで使う場合は、コラボレータの権限詳細(「Read」「Write」「Admin」のいずれか)を割り当てられます。詳細な情報は、 組織に関するドキュメント をご覧ください。

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

プライベート・レポジトリとは、自分のアカウントや組織・チームの中で、プライベートなままにしておきたいイメージを置けるレポジトリです。

Docker Hub 上でプライベート・レポジトリを使うには、 Add Repository ボタンから追加する必要があります。Docker Hub ユーザ・アカウントは1つのプライベート・レポジトリを無料で利用できます(あなたが組織の一員であれば使いづらいでしょう)。さらにアカウントが必要であれば、 Docker Hub プランのアップグレードをご検討ください。

プライベート・レポジトリが作成されたら、 Docker を使ってイメージの pushpull ができるようになります。

注釈

プライベート・レポジトリにアクセスして操作するには、Docker Hub にログインしている必要があります。

プライベート・レポジトリはパブリック・レポジトリのように見えます。しかし、パブリック・レポジトリの検索結果には表示されません。同様にパブリック・レポジトリと同じように取得することもできません。

プライベート・レポジトリにアクセスできるようにするには、「Settings」ページから対象者を指定(例: collaborators)する必要があります。それから、レポジトリの状態を変更します(パブリックをプライベートにしたり、あるいはその逆です)。プライベート・レポジトリに切り替えられるのは、空きスロット分だけです。もし足りない場合は、 Docker Hub プランのアップグレードをご検討ください。

ウェブ・フック

webhook は特定のイベントによって HTTP コールバックを行います(トリガします)。Docker Hub レポジトリの webhook を使って、人々、サービス、他のアプリケーションに対して、自分のレポジトリに新しいイメージが送信されたと知らせることができます(さらに、自動構築も行えます)。例えば、自動テストのトリガとしたり、イメージが利用可能になったらすぐデプロイする使い方です。

webhook を追加するには、Docker Hub 上の任意のレポジトリに移動し、「Setting」ボックスの下にある「Webhooks」をクリックします。webhook が呼び出されるのは、イメージの push が完了したときです。 webhook コールは JSON 形式の HTTP POST リクエストであり、次のようなものです。

注釈

自分で webhook をテストしたい場合は、 requestdb.in のようなサービスの利用を推奨します。また、Docker Hub サーバは IP アドレスのフィルタができないのでご注意ください。

ウェブ・フックの連鎖

webhook の連鎖により、複数のサービスにコールを連鎖(chain)できます。例えば、テストが作成するときのみコンテナをデプロイするトリガを行い、デプロイが終わったら別の Changelog を更新します。「Add webhook」ボタンをクリックしたら、単純に連鎖させるために必要な URL を列挙します。

webhook で1番目の連鎖は、 push が成功した後に実行されます。以降の URL はコールバックが確認されたら処理されます。

コールバックの確認

webhook 連鎖のコールバックを確認するには、次のようにします。

  1. リクエストする JSON ペイロードに``callback_url`` 値を入れてから、読み込む
  2. 有効な JSON の内容に含まれる URL に対して、POST リクエストが送信

注釈

最後のコールバックが正常だった場合のみ、 連鎖リクエストが完了したとみなされます。

webhook のデバッグを簡単にしたり、結果を単に表示したい亜愛は、設定ページにある webhook の「History」をご覧ください。

JSON データのコールバック

以下のパラメータがコールバック・データとして認められています。

  • state (必須): successfailureerror の値を受信。 success でなければ、webhook 連鎖は中断。
  • description :Docker Hub で利用可能な様々な説明を含む文字列。最大255文字。
  • context :操作に関連するコンテキストを含む文字列。Docker Hub が受信可能。最大100文字。
  • target_url :オペレーションで得られた結果を送る URL 。Docker Hub が受信可能。

コールバック・ペイロードの例

{
  "state": "success",
  "description": "387 tests PASSED",
  "context": "Continuous integration by Acme CI",
  "target_url": "http://ci.acme.com/results/afd339c1c3d27"
}