Contents
Flask と Docker 環境構築 手順:初心者向けステップバイステップガイド
FlaskアプリケーションをDockerで構築する際、ローカル環境での開発から本番環境への移行まで、手間がかかる部分が多くあります。特にプロジェクトのディレクトリ構成やDockerfileの最適化など、知識がないと詰まるポイントが多いためです。
本記事では2023年最新版に沿った具体的な手順を解説し、誰でも実際のコードを書きながら環境構築を体験できるように設計しました。
プロジェクトディレクトリの作成とファイル構造
FlaskアプリケーションをDockerで構築するには、まずプロジェクト全体の構造を整える必要があります。適切なディレクトリ構成は、後々の保守性や拡張性に大きく影響します。
Flaskアプリケーションのプロジェクト構成では、以下のような基本的なルールが重要です。
- ファイル名は小文字で統一し、日本語を使用しない
- Docker関連ファイルをプロジェクトルートに配置する
具体的な手順と推奨されるディレクトリ構成については以下の通りです。
初期設定手順
- 任意の場所に新規フォルダを作成し、
cd フォルダ名で移動します。 touch app.pyコマンドでFlaskアプリケーションファイルを作成します。- Docker関連ファイル(
Dockerfile,docker-compose.yml,.dockerignore)をプロジェクトルートに配置します。
推奨されるディレクトリ構成
| ディレクトリ/ファイル | 説明 |
|---|---|
/app.py |
Flaskアプリのメインコード |
/Dockerfile |
Dockerイメージビルド用設定 |
/docker-compose.yml |
多サービス管理用設定ファイル |
/.dockerignore |
ビルド時の不要ファイルフィルタ |
重要: ディレクトリ名やファイル名は日本語を使用せず、小文字で統一することが推奨されます。
Flaskアプリケーションの基本コード (app.py)
Flaskアプリケーションの核となるapp.pyを作成することで、Docker化の対象が明確になります。ここではシンプルな「Hello World」を実装します。
Flaskアプリケーションは、Webサーバーを起動するための最小限のコードで構成されます。以下に基本的な実装例とその仕組みを解説します。
シンプルなHello World実装例
|
1 2 3 4 5 6 7 8 9 10 11 |
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "Hello, Docker + Flask!" if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) |
このコードでは、/にアクセスすると「Hello, Docker + Flask!」と表示される基本的なアプリケーションが実装されています。
host="0.0.0.0"の指定は、Dockerコンテナ内で外部からの接続を許可するための必須設定です。
注意:
app.run()で起動した場合は、debug=Trueを設定しないようにしてください(本番環境でのセキュリティリスクがあります)。
Dockerfileの作成手順と最適化ポイント
Dockerfileは、FlaskアプリケーションをDockerイメージに変換する際の設定ファイルです。最新のベストプラクティスに沿って構築しましょう。
Dockerfileで重要なのは、サイズの軽量化とセキュリティ対策です。これらは特に本番環境での運用において不可欠です。以下に作成手順と最適化ポイントを解説します。
ベースイメージ選定のコツ
-
公式Pythonイメージを使用するのが基本です。
dockerfile
FROM python:3.11-slim -
slimバージョンは、不要なライブラリを削除しサイズを軽量化します。
マルチステージビルドの活用法
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# ビルドフェーズ(開発環境) FROM python:3.11-slim as builder WORKDIR /app COPY requirements.txt . RUN pip install --user -r requirements.txt # 本番フェーズ(最小限のイメージ) FROM python:3.11-slim WORKDIR /app COPY --from=builder /root/.local /root/.local ENV PATH=/root/.local/bin:$PATH COPY app.py . CMD ["python", "app.py"] |
マルチステージビルドにより、開発用の巨大なイメージを本番環境に持ち込まずに済むため、安全性と効率性が向上します。
ヒント: マルチステージビルドは、特に
requirements.txtのインストール時に使用すると効果的です(開発用の大きなイメージを本番環境に残さない)。
docker-compose.ymlファイルの設定例
複数サービスを同時に起動する際にはdocker-compose.ymlを使用します。以下は基本的な構成例です。
サービス定義の基本構文
|
1 2 3 4 5 6 7 8 9 10 11 |
version: '3.8' services: web: build: . ports: - "5000:5000" volumes: - .:/app environment: FLASK_ENV: development |
ポートマッピングと依存関係
| 設定項目 | 内容 |
|---|---|
ports |
ホストの5000ポートをコンテナの5000ポートに割り当てます。 |
volumes |
ローカルファイルとコンテナ内の/appディレクトリを同期します。 |
environment |
開発環境用にFLASK_ENVを設定します。 |
注意: 本番環境では
FLASK_ENV: productionに変更し、セキュリティを強化してください。
コンテナ起動・テストのコマンド実行
Dockerfileとdocker-compose.ymlが準備できたら、実際にコンテナを起動してアプリケーションをテストします。
docker-composeコマンド一覧
- ビルド:
docker-compose build - 起動:
docker-compose up -d(バックグラウンド実行) - 停止:
docker-compose down
ブラウザでの動作確認手順
- 起動後、ブラウザで
http://localhost:5000にアクセスします。 - 「Hello, Docker + Flask!」と表示されれば成功です。
トラブルシューティング: 問題が起きた場合は
docker-compose logs webでログを確認してください。
.dockerignoreファイルの重要性と設定方法
.dockerignoreは、Dockerビルド時に不要なファイルやディレクトリを除外するためのファイルです。画像サイズの削減やセキュリティ強化に直結します。
無駄なレイヤー削減の仕組み
- 通常、
.git/や__pycache__/などの不要なデータがDockerイメージに含まれてしまいます。 .dockerignoreでこれらのディレクトリを除外することで、ビルド時間とイメージサイズを大幅に軽減できます。
推奨設定例
|
1 2 3 4 5 6 |
*.pyc __pycache__ .env .git node_modules |
このように設定すると、Dockerは指定されたファイルやディレクトリを自動的に除外します。
ヒント:
.gitignoreと同様のルールが適用されますが、Docker特有のビルドプロセスに合わせた設定が必要です。
まとめ
本記事ではFlaskアプリケーションをDockerで構築する手順について以下を解説しました:
- プロジェクトディレクトリとファイル構造の作成
- Flaskアプリケーションの基本コード (
app.py) - Dockerfileとマルチステージビルドの最適化
docker-compose.ymlでの多サービス管理設定- コンテナ起動時のコマンドと確認手順
.dockerignoreファイルによる効率的なビルド
実際に手を動かしながらDocker環境構築を体験することで、Flaskアプリケーションの開発・デプロイがスムーズになるでしょう。
ぜひ本記事に従って、自分なりのFlask + Dockerプロジェクトを作成してみてください!