0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ゾンビでもわかるFlask入門-Docker環境

0
Last updated at Posted at 2026-06-30

「ローカル環境を汚さずにFlaskを学びたい」という動機で、Docker Composeを使った最小構成のFlask環境を作ったのでまとめます。pip install flask をホストで実行せず、すべてコンテナの中で完結させるのがポイントです。

完成形

flask/
├── compose.yaml      # ポート公開・ボリュームマウント・ホットリロード
├── Dockerfile        # python:3.12-slim + pip install
├── requirements.txt  # 依存ライブラリ
└── app.py            # "Hello, World!" を返す最小アプリ

各ファイル

app.py

from flask import Flask

# Flaskアプリケーションの本体を生成する
app = Flask(__name__)


# ルートURL("/")にアクセスされたときの処理
@app.route("/")
def hello():
    return "Hello, World!"


if __name__ == "__main__":
    # 0.0.0.0 で待ち受けることでコンテナ外(ホスト)からアクセスできる
    app.run(host="0.0.0.0", port=5000, debug=True)

ポイントは host="0.0.0.0"。デフォルトの 127.0.0.1 のままだとコンテナ内でしか待ち受けず、ホストのブラウザからアクセスできません。

requirements.txt

Flask>=3.0
Flask-SQLAlchemy>=3.1

Dockerfile

# 軽量なPython公式イメージをベースにする
FROM python:3.12-slim

# コンテナ内の作業ディレクトリ
WORKDIR /app

# 先にrequirements.txtだけコピーしてインストール(レイヤキャッシュを効かせる)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# アプリ本体はcompose.yamlのボリュームマウントで渡すため、ここではコピーしない

# Flaskの開発サーバを起動
CMD ["python", "app.py"]

compose.yaml

services:
  web:
    build: .
    ports:
      # ホストの5000番をコンテナの5000番に転送 → http://localhost:5000
      - "5000:5000"
    volumes:
      # カレントディレクトリをコンテナの/appにマウント → コード編集が即反映
      - .:/app
    environment:
      # debug=True と合わせてホットリロードを有効化
      - FLASK_DEBUG=1

起動と確認

docker compose up --build

別ターミナルで動作確認:

$ curl -i http://localhost:5000/
HTTP/1.1 200 OK
Server: Werkzeug/3.1.8 Python/3.12.13
Content-Type: text/html; charset=utf-8

Hello, World!

ブラウザで http://localhost:5000 を開くと "Hello, World!" が表示されます。

設計のキモ:ライブラリとソースコードで扱いを分ける

この構成の肝は、Flask(ライブラリ)はイメージに焼き込み、app.py(ソース)はマウントで渡すという役割分担です。

対象 渡し方 変更時の操作
Flask等のライブラリ ビルド時に pip install でイメージに焼き込む requirements.txt を編集して --build で再ビルド
app.py(ソースコード) ボリュームマウントで渡す 保存するだけで自動リロード(ビルド不要)

なぜ requirements.txt を先にコピーするのか

Dockerのレイヤキャッシュを効かせるためです。app.py を編集してもライブラリのレイヤは変わらないので、pip install は再実行されません。requirements.txt を変更したときだけインストールが走ります。

Flaskはどのタイミングで入るのか

docker compose up --build
  ① FROM python:3.12-slim   ← Python本体(ベースイメージに同梱)
  ② COPY requirements.txt   ← 依存リストをコピー
  ③ RUN pip install ...     ← ★ここでFlaskをインストール(ビルド時)★
  ④ docker compose up       ← コンテナ起動(python app.py)

ホスト側には一切Pythonライブラリを入れないため、環境が汚れません。

よく使うコマンド

やりたいこと コマンド
起動 docker compose up-d でバックグラウンド)
停止 docker compose down
ログ確認 docker compose logs -f
再ビルド docker compose up --build

まとめ

  • ホストには Docker だけあればよく、Python/Flask はコンテナ内で完結
  • マウント + debugモードでホットリロードが効くので開発体験も良い
  • 次は templates/ を使った render_template でHTML表示に進む予定
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?