概要

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

元記事はこちら

Python+Flask環境をDockerで構築する