概要
Pythonだとvenv
コマンドで仮想環境が簡単に構築できてよいのですが、あえてDockerを利用して開発がしたい!となったとき用。
手順
> mkdir 任意のディレクトリ > cd 任意のディレクトリ > touch Dockerfile > touch docker-compose.yml > mkdir src > touch src/requirements.txt > touch src/app.py
requirements.txtファイルをADD
してあげないと駄目なのがちょっと面倒ですね。けど、利用するモジュールが増えたときにrequirements.txtファイル利用したいので、悩ましいところ。
Dockerfile
FROM python:3.6 ARG project_dir=/projects/ ADD src/requirements.txt $project_dir WORKDIR $project_dir RUN pip install -r requirements.txt
flask run
コマンドだとポート指定できるので便利です。
docker-compose.yml
version: '3' services: flask: build: . ports: - "5000:5000" volumes: - "./src:/projects" tty: true environment: TZ: Asia/Tokyo command: flask run --host 0.0.0.0 --port 5000
JSON形式でレスポンスを返します。日本語が含まれる場合は、app.config['JSON_AS_ASCII'] = False
するのが良いです。
src/app.py
from flask import Flask, jsonify app = Flask(__name__) app.config['JSON_AS_ASCII'] = False @app.route('/') def index(): return jsonify({ "message": "テスト!!" }) if __name__ == '__main__': app.run()
Dockerコンテナを起動する
準備ができたらDockerコンテナを起動します。
docker-compose up -d
とすると、イメージがない場合はビルドしてくれるので、楽ですね。
docker-compose up -d (略) Building flask 任意のディレクトリ_flask_1 is up-to-date
コンテナに入りたい場合はdocker-compose exec flask bash
で入れます。
アクセスできるかホストから確認します。
> curl http://localhost:5000 {"message":"テスト!!"}
やったぜ。
参考
DockerコンテナでFlaskを起動し, JSONデータのPOSTとGET
http://qiita.com/paperlefthand/items/82ab6df4a348f6070a55