概要
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
https://qiita.com/paperlefthand/items/82ab6df4a348f6070a55