LoginSignup
9
14

More than 5 years have passed since last update.

FlaskアプリケーションをHeroku上のDockerで起動

Posted at

はじめに

1ヶ月程度前に、Dockerイメージをそのまま
Herokuにデプロイすることができるようになったので試してみました。
まだパブリックベータではありますが。

参考
Container registry public beta - deploy Docker images to Heroku
Container Registry and Runtime

準備

以下は既に済んでいるものとして記述します。

  • Dockerのインストール
  • Herokuのアカウント登録
  • Heroku Toolbeltのインストール

ソース

デプロイ対象には自前のFlaskアプリケーションを利用しました。
https://github.com/nanakenashi/image_clock

時刻に応じて画像を切り替えるシンプルな時計のアプリケーションです。

image_clock/
    ├ static/
    ├ templates/
    ├ Dockerfile
    ├ app.py
    └ requirements.txt
# Pythonが入ったAlpine Linuxをベースイメージに使用
FROM python:3.5.2-alpine

# gitのインストール
RUN apk update
RUN apk add git

# Pythonのパッケージインストール
ADD requirements.txt /tmp
RUN pip install -r /tmp/requirements.txt

# ソースコードを配置
WORKDIR /web
RUN git clone https://github.com/nanakenashi/image_clock.git clock

# flaskアプリケーションの起動
ENV FLASK_APP /web/clock/app.py
CMD flask run -h 0.0.0.0 -p $PORT

ポイントはflaskアプリケーションの起動の部分です。

  • 環境変数の設定はRUNではなくENVで行う
  • hostは実行環境のIPに合わせるために0.0.0.0とする
  • Heroku環境におけるポート番号は、環境変数PORTに格納されている

手順

事前確認

dockerコマンドが利用できることを確認し

$ docker ps

Herokuへのログインを済ませます。

$ heroku login

ソースコードの配置

GitHubからソースコードを取得し、ディレクトリに移動します。

$ git clone https://github.com/nanakenashi/image_clock.git ./image_clock
$ cd image_clock

Herokuアプリケーションの作成

アプリケーションの置き場所を確保します。

$ heroku create flask-clock-sample

この段階ではソースも何も入っていないのでただの箱です。
アクセスするとこんな感じになります。↓
Heroku___Welcome_to_your_new_app_.png

Dockerコンテナのpush

Dockerfileを元にコンテナをビルドし、リポジトリに送ります。

$ heroku container:push --app flask-clock-sample web
  • --app flask-clock-sample: 指定したアプリケーションにコンテナを展開
  • web: Herokuにおけるプロセスタイプ(webworker)を指定

動作確認

$ heroku open --app flask-clock-sample

時計アプリケーションの動作を確認できました。
Clock.png

まとめ

今回利用したアプリケーションではアドオンを利用していないため
非常にシンプルに設定し、デプロイすることができました。

DB接続やログの整理など、Herokuらしい構成を作るにはもう少し苦労しそうです。

9
14
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
9
14