背景と目的
ローカル環境に色々なDockerfileが増えてきた。
ごちゃごちゃし始めたので、GitHubにアップしてスッキリしたい。
ついでに、前から気になっていたAutomated buildを試してみる。
公式ドキュメント
注意
Product and tool manualsに
「Docker Hub - Superseded by Docker Store and Docker Cloud」
と記載されています。
https://hub.docker.com/ ではなく
https://cloud.docker.com/ から設定やリポジトリの作成を行って下さい。
手順概要
- GitHubにリポジトリを作成
- Docker Cloudの設定からGitHubを連携
- Docker Cloudにリポジトリを作成
- GitHubにDockerfileを保存
- Docker Cloudでビルドの状況を確認
GitHubにリポジトリを作成
Build your own imageを参考にDockerfileを作るので、リポジトリ名は whalesay にしました。
READMEは、Automated buildが完了後、Docker Cloudにも同じ内容が表示されます。
リポジトリの Settings / Integrations & services / Add service から Docker を選択します。
Docker Cloudの設定からGitHubを連携
Docker Cloudの設定からGitHubへ接続します。
Docker Cloudにリポジトリを作成
Docker側のリポジトリ名は、GitHubと一致させる必要はないが、今回は whalesay にしました。
Build SettingsでGitHubをクリックして、GitHub側のリポジトリを選択します。
連携がうまくいくと Recent builds にGitHubの情報が表示されます。
ただし、この段階では、ビルドは行われません。
この後、GitHubに更新が発生するとビルドが行われます。ビルド完了後にGitHubのREADMEも表示されます。
GitHubにDockerfileを保存
GitHubのリポジトリをcloneします。
$ git clone git@github.com:maedamikio/whalesay.git
$ cd whalesay
Dockerfileを作成します。
$ vim Dockerfile
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
Dockerfileを保存します。
$ git add Dockerfile
$ git commit -m "create Dockerfile"
$ git push
Docker Cloudでビルドの状況を確認
Docker CloudのリポジトリでBuildsを確認します。
Build Statusは EMPTY です。キューに登録されているが、ビルドは始まっていない状態です。
2〜3分経ったでしょうか?Build Statusが BUILDING になりました。
ビルドが完了しました。約15分かかりました。
ちなみに、ローカル環境(i7 3GHz)では、3分弱でした。apt-get updateが2分強でした。
棒グラフをクリックすると詳細が表示されます。
BUILD RULESでBuild Cachingが有効になっているので、Dockerfileに変更がほとんどなければビルド時間は短縮されます。
BUILD LOCATIONは「Small 1 CPU, 1GB RAM」です。課金無しでも「Large(even faster) 1CPU, 3.75GB RAM」に変更できます。
ただ、人気があるのか、ビルド時間は、あまり短縮されません。むしろ、キャッシュ有りでSmallの倍の時間がかかってます。
下記のグラフは、キュー待ち時間(Queue)とビルド時間(Success)です。Dockerfileは変更していません。Trigger Buildを使ってビルドを再実行しました。左から
- 初回のビルド。Small。
- 2回目のビルド。Small。キャッシュの効果でビルド時間は大幅に短縮。
- 3回目のビルド。Small。キュー待ち時間が発生。この辺りは、運次第っぽい。
- 4回目のビルド。Largeへ変更。キュー待ちは発生しないが、ビルド時間はSmallの2倍超。
まとめ
- 手順自体は、非常に簡単でした。DockerfileをGitHubにアップしてスッキリしたいと思います。
- Docker Cloudの無料プライベートリポジトリは、1つなので、複数のプライベートリポジトリを利用する場合は、課金が必要です。
- ビルドは、Build on my own nodesが選べるので、高性能環境があればビルド時間を短縮出来るのだと思う。ただ、そこまでするならローカル環境でも良い気がする。
- Automated repository testsとRedeploy services automaticallyも出来るのでやってみたいです。