はじめに
2015 tech-yuruyuru アドベントカレンダー - connpass 13日目です。
PythonのWebアプリを開発するとき、Mac上でそのまま開発することが多いんですがHerokuに近い環境で動作確認もしたい。 Heroku-toolbeltの中にDockerfileを生成してくれるコマンドがあるみたいなので試してみる。
ここをザッと読む限り app.json ファイルにプロジェクトの構成を記述すればHeroku-Toolbeltから簡単にDockerfileが生成出来るみたいなので試してみる。
Dockerfileの作成
heroku-toolbeltに heroku-docker
プラグインをインストール。
$ heroku plugins:install heroku-docker
python版のdocker-imageは↓にあるみたい。
app.jsonの用意
{ "name": "python/flask docker environment", "description": "Docker configulation for run python/flask application.", "image": "heroku/python", "addons": [ "heroku-postgresql" ] }
Procfileと他の設定ファイルも用意
Procfile
# Flask web: gunicorn manage:app -w 1 --log-file -
runtime.txt: デフォルトでは2系なので指定。もう3.5が使える。
python-3.5.0
requirements.txt
$ pip freeze > requirements.txt
Dockerfile生成
Dockerfileとdocker-compose.ymlを生成
$ heroku docker:init
実行
docker-machineを起動してIPアドレスをdocker-daemonに伝える(手順は省略)。
$ docker-compose up web $ open "http://$(docker-machine ip default):8080"
docker-compose up web
が何度も失敗して不思議だったけどdocker-machineをrestartしたら上手くいった。
ただしブラウザでアクセスしてもつながらない
python2系だと上手くいく。
その他
- shell
$ docker-compose run shell
- コンテナのrebuild
$ docker-compose build
- デプロイ
heroku docker:release
が使える。それ以外は今まで通り
$ heroku create # 登録 $ heroku docker:release # リリース $ heroku open # ブラウザで開く $ heroku logs # ログの確認 $ heroku run python # pythonの実行
おわりに
ギリギリ13日目...
今のところ、変更があるたびにdocker buildし直すのは面倒そうなので、開発は基本的にMac上で直接行うつもり。