自分用 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]
...
centos
と ansible/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)とは、プライベート・リポジトリに対するアクセスを与えたい人です。かつてはリポジトリに対して push
や pull
するために設計されました。コラボレータはリポジトリの削除といった管理用のタスクは行えず、プライベートからパブリックにステータスの変更もできません。
注釈
コラボレータは他のコラボレータを追加できません。リポジトリの所有者のみが、管理アクセスを持っています。
また、Docker Hub を組織やチームで使う場合は、コラボレータの権限詳細(「Read」「Write」「Admin」のいずれか)を割り当てられます。詳細な情報は、 組織に関するドキュメント をご覧ください。
プライベート・リポジトリ¶
プライベート・リポジトリとは、自分のアカウントや組織・チームの中で、プライベートなままにしておきたいイメージを置けるリポジトリです。
Docker Hub 上でプライベート・リポジトリを使うには、 Add Repository ボタンから追加する必要があります。Docker Hub ユーザ・アカウントは1つのプライベート・リポジトリを無料で利用できます(あなたが組織の一員であれば使いづらいでしょう)。さらにアカウントが必要であれば、 Docker Hub プランのアップグレードをご検討ください。
プライベート・リポジトリが作成されたら、 Docker を使ってイメージの push
と pull
ができるようになります。
注釈
プライベート・リポジトリにアクセスして操作するには、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 連鎖のコールバックを確認するには、次のようにします。
- リクエストする JSON ペイロードに
callback_url
値を入れてから、読み込む - 有効な JSON の内容に含まれる URL に対して、POST リクエストが送信
注釈
最後のコールバックが正常だった場合のみ、 連鎖リクエストが完了したとみなされます。
webhook のデバッグを簡単にしたり、結果を単に表示したい亜愛は、設定ページにある webhook の「History」をご覧ください。
JSON データのコールバック¶
以下のパラメータがコールバック・データとして認められています。
state
(必須):success
、failure
、error
の値を受信。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"
}
参考
- Your Hub repositories
- https://docs.docker.com/docker-hub/repos/