DockerでローカルにFlask環境を構築する
以下作成するファイル一覧。
$ tree . ├── Dockerfile ├── app.py ├── docker-compose.yml └── requirements.txt
まずDockerを使う前にローカルでFlaskの環境を構築する。
Flaskをインストールするため requirements.txt
を作成する。
$ cat requirements.txt Flask==2.1.2
Flaskをインストールする。
$ pip install --no-cache-dir -r requirements.txt
次にアプリケーション app.py
を作成する。
from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "Hello World!"
Flaskを起動する。
$ flask run * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:5000 Press CTRL+C to quit
http://127.0.0.1:5000
を開いて確認する。
ここまでがFlaskのアプリケーションの準備。
Dockerの環境を用意する。
まずは Dockerfile
を作成する。
FROM python:3.10.7-slim-bullseye WORKDIR /usr/src/app ENV FLASK_APP=app.py ENV FLASK_ENV=development COPY requirements.txt ./ RUN pip install --upgrade pip RUN pip install --no-cache-dir -r requirements.txt
Dockerのイメージは DOCKER OFFICIAL IMAGE
から出ている slim-bullseye
を使う。
Alpineの方が一般的だが、Pythonのイメージとして使う場合、ビルドが遅かったりイメージが肥大化するので非推奨とのこと。
次に docker-compose.yml
を作成する。
version: "3" services: app: build: . ports: - "5001:5001" container_name: flask volumes: - ./:/usr/src/app command: flask run --host=0.0.0.0 --port=5001
Dockerを起動する。
$ docker-compose up
http://127.0.0.1:5001/
を開いて確認する。
Dockerfile
使わずに docker-compose.yml
だけを使う場合。
version: "3" services: app: image: python:3.10.7-slim-bullseye container_name: "flask" environment: - FLASK_APP=app.py - FLASK_ENV=development working_dir: /usr/src/app build: . ports: - "5001:5001" container_name: flask volumes: - ./:/usr/src/app command: > sh -c ' pip install --upgrade pip && pip install --no-cache-dir -r requirements.txt && flask run --host=0.0.0.0 --port=5001 '