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がそれを認識し、イメージを更新します。
以下は更新中。数分ぐらいかかります。
更新成功画面。