Dockerコンテナを利用してFlask + Kerasの開発環境を構築する
大学の卒業研究でKerasとFlaskを利用してWebアプリケーションを開発していたのですが、Python3.7.2にアップデートした途端に以下のエラーが出ました。
$ pip3 install tensorflow Could not find a version that satisfies the requirement tensorflow (from versions: ) No matching distribution found for tensorflow
調べた結果Python3.7以上だとtensorflowが使えないようなので、kerasとFlaskの開発環境をDockerでコンテナごと作ってしまおうと思いました。
flaskの開発環境をDockerで利用したい人はぜひ参考にしてください。自分用メモとして残しておきます。
- 開発環境
- macOS: mojave
- docker version: 18.09.1
Dockerfileを記述
とりあえず、pythonのバージョンを3.6にしておき、そのほかの必要そうなライブラリもまとめてpipしておきます。
FROM python:3.6 ARG project_dir=/app/ COPY . $project_dir RUN apt-get update RUN apt-get install -y vim RUN python -m pip install --upgrade pip RUN python -m pip install image RUN python -m pip install flask RUN python -m pip install keras RUN python -m pip install tensorflow RUN python -m pip install numpy
Dockerfileを記述し、flaskのプロジェクト配下におきます。
Flaskのpythonファイルの設定
if __name__ == '__main__': K.clear_session() load_model() model._make_predict_function() app.run(debug=True,host="0.0.0.0",port=5000)
Flaskのpythonファイルの実行関数部分を以上のように設定します。 特に最後のapp.runの引数を正しく設定してください。
またkerasを使っている人は_make_predict_function()で実行しないとtensor tensorのエラーが出る可能性があります。
Docker imageのbuild
いよいよbuildします。
$ docker build -t docker_flask .
-tオプションの後にイメージの名前を好きにつけてください。最後の.はカレントディレクトリを指しています。
ちなみにそこそこ時間かかります。
最後に以下のコマンドでコンテナを起動して、接続します。
$ docker run -p 5000:5000 -it docker_flask /bin/bash
requirements.txtを生成(おまけ)
herokuや次から設定が面倒な人は、requirements.txtを設定しておくと便利です。
dockerコンテナに接続した状態で、以下のコマンドを実行します。
$ pip freeze > requirements.txt
このrequirements.txtの中身を元にherokuなどに引き継げます。
参考
以下のリンクは参考になりました。