Docker Hub の自動構築

リポジトリに構築コンテキスト(内容物)を保管しておくと、自動的にイメージを構築できます。 構築コンテキスト(build context) とは、特定の場所にある Dockerfile と、あらゆるファイルです。自動構築において、構築コンテキストとは Dockerfile が含まれているリポジトリのことです。自動構築は複数の利点があります。

  • イメージの構築は、指定した通り確実に行われます。
  • Dockerfile は Docker Hub リポジトリの誰もがアクセス可能です。
  • コードが変更されると、リポジトリも自動的に更新されます。

自動構築はパブリック・プライベートの各リポジトリでサポートされており、 GitHubBitbucket 上で利用できます。

動作条件

自動構築のためには、 Docker Hub のアカウント と、ホステッド・リポジトリ・プロバイダ(GitHub か Bitbucket)が必要です。既に GitHub や Bitbucket アカウントにリンクしているのであれば、パブリックもしくはプライベートかの接続タイプを選ぶ必要があります。現在の接続状態を確認するには、Docker Hub アカウント上で Profile > Settings > Linked Accounts & Services をお選びください。

ホステッド・リポジトリ・サービスとリンク

  1. Docker Hub にログインします。
  1. Profile > Settings > Linked Accounts & Services を辿ります。
  1. リンク(連携)したいサービスをクリックします。

システムが Public か Private か Limited Access か訊ねてきます。自動構築をしたい場合は、Public か Private を選ぶ必要があります。

  1. パブリックかプライベートの接続タイプを選びます。

システムがログインのためサービス(Bitbucket か GitHub)の委任を要求してきます。次の例は Bitbucket のプロンプト例です。

Bitbucket

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

リンク済みアカウント

自動構築リポジトリの作成

自動構築リポジトリ(automated build repository)が完全に依存しているのは、コード・リポジトリとの統合です。この自動構築イメージ・リポジトリに対しては docker push コマンドで送信できません。コード・リポジトリにコミットすることによってのみ、イメージを変更できます。もしも docker push と自動構築の両方を使いたい場合は、 docker push 用の通常リポジトリと、自動構築用のリポジトリを作ることになるでしょう。

  1. Docker Hub で Create > Create Automated Build を選びます。

システム上に Users/Organizations とコード・リポジトリの一覧が表示されます。

  1. User/Organizations から選びます。
  1. オプションで、リポジトリ一覧をフィルタできます。
  1. 自動構築するプロジェクトを選びます。

システム上に自動構築用のダイアログが表示されます。

作成ダイアログ

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

  1. 下の方にある「Click here to customize」リンクをクリックすると、自動構築に関するカスタマイズを行えます。
作成ダイアログ

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

作成ダイアログ
  1. 「Create」をクリックします。

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

自動構築ホームページ

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

GitHub

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 は手動構築のオプションが使えなくなります。新しい構築を追加するには、次のようにします。

  1. +(プラス記号)をクリックします。
  1. タイプを選びます。

コード・ブランチやイメージのタグで構築できます。

  1. ブランチやタグ名を入力します。

正規表現では複数の値を指定できます。正規表現の記述例を見るには、ダイアログ中にある Show more のリンクをクリックします。

正規表現のヘルプ
  1. Dockerfile の場所を入力します。
  1. タグ名を指定します。
  1. Save Changes をクリックします。

間違えたり構築条件を削除したい場合は、ー(マイナス記号)をクリックしてから、Save Changes をクリックします。

リモート構築トリガ

自動構築をプログラミング的なトリガにするには、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/