Docker Hub の自動構築¶
リポジトリに構築コンテキスト(内容物)を保管しておくと、自動的にイメージを構築できます。 構築コンテキスト(build context) とは、特定の場所にある Dockerfile と、あらゆるファイルです。自動構築において、構築コンテキストとは Dockerfile が含まれているリポジトリのことです。自動構築は複数の利点があります。
- イメージの構築は、指定した通り確実に行われます。
Dockerfile
は Docker Hub リポジトリの誰もがアクセス可能です。- コード画変更されると、リポジトリも自動的に更新されます。
自動構築はパブリック・プライベートの各リポジトリでサポートされており、 GitHub と Bitbucket 上で利用できます。
動作条件¶
自動構築のためには、 Docker Hub のアカウント と、ホステッド・リポジトリ・プロバイダ(GitHub か Bitbucket)が必要です。既に GitHub や Bitbucket アカウントにリンクしているのであれば、パブリックもしくはプライベートかの接続タイプを選ぶ必要があります。現在の接続状態を確認するには、Docker Hub アカウント上で Profile > Settings > Linked Accounts & Services をお選びください。
ホステッド・リポジトリ・サービスとリンク¶
- Docker Hub にログインします。
- リンク(連携)したいサービスをクリックします。
システムが Public か Private か Limited Access か訊ねてきます。自動構築をしたい場合は、Public か Private を選ぶ必要があります。
- パブリックかプライベートの接続タイプを選びます。
システムがログインのためサービス(Bitbucket か GitHub)の委任を要求してきます。次の例は Bitbucket のプロンプト例です。

コード・リポジトリに対する権限が追加された後は、システムは Docker Hub に戻してくれます。これでリンク設定が完了しました。

自動構築リポジトリの作成¶
自動構築リポジトリ(automated build repository)が完全に依存しているのは、コード・リポジトリとの統合です。この自動構築イメージ・リポジトリに対しては docker push
コマンドで送信できません。コード・リポジトリにコミットすることによってのみ、イメージを変更できます。もしも docker push
と自動構築の両方を使いたい場合は、 docker push
用の通常リポジトリと、自動構築用のリポジトリを作ることになるでしょう。
- Docker Hub で Create > Create Automated Build を選びます。
システム上に Users/Organizations とコード・リポジトリの一覧が表示されます。
- User/Organizations から選びます。
- オプションで、リポジトリ一覧をフィルタできます。
- 自動構築するプロジェクトを選びます。
システム上に自動構築用のダイアログが表示されます。

ダイアログには変更可能なものがデフォルトで入っています。デフォルトでは、Docker はリポジトリのブランチ毎にイメージを構築します。また、ソースのルート・ディレクトリに Dockerfile があると想定していますが、カスタマイズにより変更可能です。イメージを構築する時は、ブランチ名で Docker がタグ付けします。
- 下の方にある「Click here to customize」リンクをクリックすると、自動構築に関するカスタマイズを行えます。

構築時にどのコード・ブランチがタグを使うか指定できます。設定を追加するには+(プラス記号)をクリックします。ダイアログでは正規表現が使えます。

- 「Create」をクリックします。
システムは「AUTOMATED BUILD」(自動構築)用のホームページを開きます。

GitHub を使っている場合、リポジトリの Settings > Webhooks & Services ページに Docker との統合が表示されます。

Bitbucket のコード・リポジトリを使っている場合も、同様にページが表示されます。Docker 統合を外す時は注意してください。統合を削除することにより、自動構築はできなくなります。
構築プロセスの理解¶
新しい自動構築リポジトリを作ると、Docker Hub はイメージを構築します。数分すると、イメージのダッシュボード上に新しいイメージが構築されるのが見えるでしょう。「Build Details」のページで、構築システムのログが確認できます。

構築プロセス中、Docker は Dockerfile
の内容を Docker Hub にコピーします。Docker コミュニティ(パブリック・リポジトリ用)か、適切なチームメンバ/組織(プライベート・リポジトリ用)かにより、リポジトリ・ページ上の Dockerfile の見え方が異なります。
構築プロセスは Dockerfile
と同じディレクトリにある README.md
を探します。リポジトリに README.md
があれば、リポジトリ用の full description として使われます。構築後に full description を書き換えても、次に自動実行が処理されると上書きされます。変更したい場合は Git リポジトリにある README.md
を編集してください。
トリガにできるのは1つの構築だけであり、5分ごとに1つ処理されます。既に構築が保留中(pending)の場合、あるいは、直近で構築リクエストを送信している場合は、Docker は新しいリクエストを無視します。
Build Settings ページを使う¶
Build Setting ページでは、既存の自動構築設定の管理や、新しい設定を追加できます。デフォルトでは、ソース・リポジトリに新しいコードがマージされたら、DockerHub イメージを構築するトリガになります。

チェックボックスを外すと、この機能は無効化されます。このページ上でイメージの構築や設定に関する各種の調整ができます。
Build Settings の一番上にダイアログがあります。ここで指定したコードのブランチや構築時のタグを使い構築できます。
Docker はコード・リポジトリに対して push で変更が加えられると、毎回構築を行います特定のブランチやタグを指定すると、イメージの構築を手動で行えます。構築ブランチやタグに正規表現構文(regex)を使うと、Docker は手動構築のオプションが使えなくなります。新しい構築を追加するには、次のようにします。
- +(プラス記号)をクリックします。
- タイプを選びます。
コード・ブランチやイメージのタグで構築できます。
- ブランチやタグ名を入力します。
正規表現では複数の値を指定できます。正規表現の記述例を見るには、ダイアログ中にある Show more のリンクをクリックします。

- Dockerfile の場所を入力します。
- タグ名を指定します。
- Save Changes をクリックします。
間違えたり構築条件を削除したい場合は、ー(マイナス記号)をクリックしてから、Save Changes をクリックします。
リポジトリへのリンク¶
リポジトリへのリンク(Repository Links)は、他と連携する自動構築です。ある自動構築リポジトリが更新されると、この他のリポジトリの更新をトリガとして Docker が自動構築します。つまり、関連するイメージと同期し続けます。1つ以上のイメージ・リポジトリが指定できます。必要になるのは、関連する2つのイメージの片方だけです。もし、双方に設定してしまうと、構築が永久ループしてしまいます。
リンクの追加は次の通りです。
- 自動構築リポジトリの Build Settings に移動します。
- Repository Links の箇所で、イメージのリポジトリ名を入力します。
リモートのリポジトリ名は ubuntu
のような公式リポジトリ名か、 namespace/repoName
のようなパブリック・リポジトリ名である必要があります。
- Add をクリックします。

リモート構築トリガ¶
自動構築をプログラミング的なトリガにするには、GItHub や BitBucket のような他のアプリケーションをリモート構築のトリガとして設定します。自動構築の Build Triggers (構築トリガ)を有効化すると、トークンと URL が表示されます。

curl
を構築のトリガとして使えます。
$ curl --data build=true -X POST https://registry.hub.docker.com/u/svendowideit/testhook/trigger/be579c
82-7c0e-11e4-81c4-0242ac110020/
OK
正常に動作するかを確認するには、同じページの Last 10 Trigger Logs (直近のトリガ10個のログ)をご覧ください。
参考
- Automated Builds on Docker Hub
- https://docs.docker.com/docker-hub/builds/