LoginSignup
7
7

More than 3 years have passed since last update.

Docker+GitHub+HerokuでCI/CDっぽく

Posted at

やった事

前に記事で公開したQiitaタグ自動ジェネレータをWebアプリとして手軽に試せる様に公開しました。
ついでにGitHubでソースも晒しています。

※Freeプランなので30分間アクセスがないと休眠してしまいます。少し時間がかかる時があるのはご愛嬌という事で...

全体図

Webアプリを公開するにあたりHerokuを使いました。GitHubとも連携させたのでこんな感じです。
GitHubにソースをpushすると自動的にHerokuでビルドが走りDockerコンテナのデプロイまでやってくれます。仕事での開発だと今時CI/CDなんて当たり前だと思いますが、個人でお金をかけずに環境作ってみたという感じです。

qiita投稿用.png

Herokuって?

アプリケーションの開発から実行、運用までのすべてをクラウドで完結できるPaaSです。(公式サイトより)
結構前からあるサービスで知名度も高く知っている人も多いと思います。
以下を魅力に感じ今回使いました。

  • 無料でWebアプリを公開することが出来る ※稼働時間など一部制約あり
  • GitHub連携できる
  • Docker対応している(Heroku dyno

GitHub連携するには?

Herokuの画面から設定するだけ、すごく簡単。Automatic deploysを有効にするだけで、GitHubにpushされたらHerokuにアプリをデプロイするところまでやってくれます。
スクリーンショット 2019-12-21 18.10.49.png

Dockerビルドするには?

連携したGitHubにDockerfileはもちろんですが、heroku.ymlという設定ファイルが必要になります。
今回用意したheroku.ymlはこちら。

heroku.yml
build:
  docker:
    web: Dockerfile

色々出来るらしいですが、単純にDockerfileからビルドするだけなのでシンプルな内容となってます。
詳細な書き方は公式ドキュメントを見てみてください。

ちなみにDokerfileはこちら。
PythonのWebアプリケーションフレームワークであるflaskを使いました。

FROM python:3-alpine

WORKDIR /work
RUN wget http://gensen.dl.itc.u-tokyo.ac.jp/soft/pytermextract-0_01.zip
RUN unzip pytermextract-0_01.zip
RUN cd pytermextract-0_01 && python setup.py install

RUN apk update
RUN apk --no-cache add git gcc libc-dev libxml2-dev libxslt-dev

RUN git clone https://github.com/fukumasa/auto-create-qiita-tags

WORKDIR /work/auto-create-qiita-tags
RUN pip install -r requirements.txt

ENV FLASK_APP /work/auto-create-qiita-tags/app.py
CMD flask run -h 0.0.0.0 -p $PORT

Herokuでは起動時のポートがPORTという環境変数に格納されているため、flaskアプリケーション起動時に$PORTでポート指定しています。
これでコンテナがビルドされるとCMDの内容が実行されます。

起動したDockerアプリには80ポートでアクセスするため、おそらくですが、コンテナ内部の$PORTポートとコンテナが稼働しているサーバの80ポートが自動的にフォワーディングされていると思われます。
Dockerコンテナをdocker runで実行する際は、通常-p 80:5000のようにポートフォワーディングを明示的に行う事が多いと思いますが、Herokuではこの辺りはあまり意識しなくても良さそうです。

まとめ

Herokuを使ってDockerアプリを公開してみました。
GitHubを使えば、既存のソース+heroku.ymlで手軽に連携することが出来ます。
そもそもHerokuの使い方とかより詳細なコマンドとかは以下の参考ページを見てみてください。

参考ページ

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7