DockerHub + GitHub連携
Infrastructure as Codeを実現します。 GitHubでDockerfileを管理し、DockerHubにはその変更からコンテナイメージを作成してもらうことにします。 あらかじめDockerHubとGitHubのアカウントは作成済みであるとします。
DocherHubで連携設定
DokerHubにログインします。
右上のメニューから「Settings -> Linked Accounts & Services -> Link Github」を選択します。
注意事項を読んで問題なければPublic and Privateを選択します。
認証します。
連携の設定ができました。

GithubにDockerfileをpush
一旦Githubに移ります。 適当なDockerfileを作成します。 公式のDockerfileをちょっと改変しました。
# 公式 Python ランタイムを親イメージとして使用
FROM python:3.4.1
# /app ディレクトリを作成
RUN mkdir /app
# 作業ディレクトリを /app に設定
WORKDIR /app
# 現在のディレクトリの内容を、コンテナ内の /app にコピー
ADD . /app
# requirements.txt で指定された必要なパッケージを全てインストール
RUN pip install -r requirements.txt
# ポート 5000 番をコンテナの外の世界でも利用可能に
EXPOSE 5000
# 環境変数の定義
ENV NAME World
# コンテナ起動時に main.py を実行
CMD ["python", "/app/main.py"]
main.py、requirements.txtを作成します。 main.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return 'Hello, World!'
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000)
requirements.txt
Flask
これらのファイルが置いてあるディレクトリでイメージを作成します。
docker build -t flask .
早速実行しましょう。 Flaskでは5000番ポートをリッスンさせています。Dockerには5000番を開けるようにしています。 docker runコマンドでローカルの4000番をDockerの5000番にポートフォワードするようにオプションをつけます。
docker run -p 4000:5000 flask
ブラウザでhttp://localhost:4000/を開けば、「Hello, World!」と表示されます。
これでこの3つのファイル、Dockerfile、main.py、requirements.txtがちゃんと動くDockerを作成することが保証されました。
ではGithubにリポジトリを作成し、この3ファイルをpushしましょう。

Docker HubとGithubを連携
再びDocker Hubに戻ります。
メニューから「Create -> Create Automated Build -> Github」を選択します。
先ほど作成したリポジトリを選択します。
適当な名前とディスクリプションをつけて作成します。
できました。
publicで作ったので、flaskのDockerイメージが欲しい方はご自由にお使いください。
これでGithubに変更があった場合は自動でDocker Hub上のイメージも更新されるはず。
Githubに変更をpush
Githubに変更をpushするとすぐにDocker Hubがそれを認識し、イメージを更新します。
以下は更新中。数分ぐらいかかります。
更新成功画面。
