この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。プロダクトグループの坂井です。
Pythonのフレームワークの一つであるFlaskを使う機会がありましたので、まずはローカル開発環境をDockerで構築してみました。
作業環境
- macOS Mojave 10.14.6
- Docker 19.03.1
- Docker Compose 1.24.1
Dockerのインストールについては割愛します。
構築するローカル開発環境
- Python 3.7.4
- Flask 1.1.1
さっそく構築
Pythonの公式イメージがDocker Hubにありますので、公式イメージを利用してコンテナを作成します。
Dockerfile
FROM python:3.7.4
ARG project_directory
WORKDIR $project_directory
RUN pip install flask
6行目で最新バージョン1のFlaskをインストールしています。
docker-compose.yml
version: "3.7"
services:
web_flask:
build:
context: .
args:
project_directory: "/projects/"
ports:
- "5000:5000"
volumes:
- "./sample_project:/projects"
environment:
TZ: "Asia/Tokyo"
FLASK_ENV: "development"
command: "flask run --host 0.0.0.0 --port 5000"
環境変数にFLASK_ENV: "development"
を指定すると、コード変更時のリロードやデバッグ情報が見れるので、開発時は指定しておくことをお勧めします。
続いて実際に動かすコードを作成します。今回は 公式ページ に記載されているコードを実行してみます。
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
これまで準備したファイルを配置します。
[実行ディレクトリ]
├── Dockerfile
├── docker-compose.yml
└── sample_project
└── app.py
準備ができたら起動します。
docker-compose up -d
動作確認のため、リクエストを投げてみます。ブラウザでhttp://localhost:5000
にアクセスしても確認できます。
curl http://localhost:5000
Hello, World!
機能を追加してみる
作成した環境でそのまま実装を進めることができます。app.py
ファイルを変更し保存します。
app.py
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
@app.route('/sample', methods=['POST'])
def sample_post():
return "param1:{}".format(request.form['param1'])
ハイライト部分を追加、変更しました。新たにPOST /sample
を追加しました。
処置としては受け取ったパラメータ(param1
)をただ返すだけです。
追加したコードを実行してみます。
curl http://localhost:5000/sample -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "param1=hogehoge"
param1:hogehoge
コンテナとファイルが同期されており、Flaskがコードの変更を検知してリロードしているため、コードを編集して保存するだけで変更が反映されています。便利ですね。
参考
- 執筆時点(2019/08/14)の最新バージョン ↩