麻布十番で働くデータ分析者のブログ

グロースハック、プログラミング、データ分析の色々を発信します

Dockerコンテナを利用してFlask + Kerasの開発環境を構築する

f:id:nimi0370376:20190127053000j:plain

大学の卒業研究で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などに引き継げます。

参考

以下のリンクは参考になりました。

qiita.com