Docker HubにはGitHubのリポジトリからDockerfileを取得してイメージのビルド・タグ付けを自動で行ってくれる機能が存在する。
docs.docker.com
GitHubにDockerfileを上げているのであれば、この方が逐一ローカルでイメージをビルドしてpushするよりも断然楽なので、方法について書く。
GitHub側の準備
Docker Hubでイメージを公開したいDockerfileが存在するリポジトリを作成しておく。
今回は以下のリポジトリを使用する。
https://github.com/kamatimaru/docker-mysql57-ja
Docker Hub側の準備
Docker HubとGit Hubをアカウント連携する。
→ 特にハマるポイントはないので省略
リポジトリを作成する。
リポジトリ名は「mysql57-ja」とする。
※ ${ユーザー名}/${リポジトリ名}がDockerイメージの名称になるので注意。
(今回の例では「kamatimaru/mysql57-ja」)
「BUILD RULES」を設定する。
「BUILD RULES」というプルダウンを押すとビルドの条件を設定できる。
この設定で
- ビルドがトリガーされるタイミング
- イメージのタグ付けのルール
が決まる。
今回は以下の2つを設定する。
- GitHub側でmasterに変更がpushされた場合は、イメージのビルドを実行かつ「latest」とタグを打つ。
- GitHub側で数字のタグ(1.2など)がpushされた場合は、イメージのビルドを実行かつ同じ数字のタグを打つ(ex kamatimaru/mysql57-ja:1.2)。
・1に関しては、デフォルトで設定されているので、対応不要である。
・2に関しては、「View example build rules」を押すと表示される設定例の「Match versions」から「release-」を削除したものをコピーして設定すればOK
保存
「Create」を押す。
※ 「Create & Build」でもよいが、今回はpushしたときにビルドがトリガーされることを確認するので、「Create」のみとしている。
事前に必要な設定は以上
動作確認
masterに変更をpushした際の動作確認
・pushする。
$ git push origin master
・画面からビルドがトリガーされたことを確認できる。
・完了
数字のタグをpushした際の動作確認
・1.0とタグを打ってpushする。
$ git tag -a 1.0 -m 'version 1.0 released.' $ git push origin 1.0
・画面からビルドがトリガーされたことを確認できる。
・完了
イメージをpullできるか確認
最後に、自動ビルドしたイメージをDocker Hubからpullできるか確認しておく。
$ docker pull kamatimaru/mysql57-ja Using default tag: latest latest: Pulling from kamatimaru/mysql57-ja 54fec2fa59d0: Already exists bcc6c6145912: Already exists 951c3d959c9d: Already exists 05de4d0e206e: Already exists 319f0394ef42: Already exists d9185034607b: Already exists 013a9c64dadc: Already exists e745b3361626: Pull complete 03145d87b451: Pull complete 3991a6b182ee: Pull complete 62335de06f7d: Pull complete 2f66c962ba63: Pull complete 370a4e179afb: Pull complete c9f8c02834ba: Pull complete 4bf79f5c9c7b: Pull complete dc922bd9690b: Pull complete 6b4df9c045ed: Pull complete b4b580d59a14: Pull complete e6004b9c2dde: Pull complete d4d4dd82f4a2: Pull complete 890c6a39b4f6: Pull complete Digest: sha256:7fe88ae4d3c96c7a4f71f6af586a39bae05581c65ced99f9ecac73f8f295f5dc Status: Downloaded newer image for kamatimaru/mysql57-ja:latest docker.io/kamatimaru/mysql57-ja:latest $ docker images | grep "/mysql57-ja" kamatimaru/mysql57-ja latest e5aef8912018 17 minutes ago 485MB $
→ 成功