概要
このドキュメントでは、FlaskとMySQLを使用したWebアプリケーション開発環境をDockerで構築する手順について説明します。また、この環境をCloudRunにデプロイすることを視野に入れています。
開発環境
- フレームワーク: Flask (Pythonベース)
- データベース: MySQL
ディレクトリ構成
プロジェクトのディレクトリ構成は以下のようになっています:
├─backend
| ├─controllers
| | ├─index.py # メインページの処理
| | ├─quiz.py # クイズページの処理
| | └─result.py # 結果ページの処理
| ├─data
| ├─gpt
| ├─static
| │ ├─js
| │ └─style
| ├─templates
| ├─__init__.py
| ├─Dockerfile # Flaskアプリ用Dockerfile
| └─model.py
├─docker-compose.yml # Docker Compose設定ファイル
├─.env # 環境変数設定ファイル
└─run.py # アプリケーションエントリーポイント
ファイル詳細
Dockerfile
Flaskアプリケーション用のDockerfileです。
FROM --platform=$BUILDPLATFORM python:3.10-alpine AS builder
WORKDIR /code
# 必要なライブラリをインストール
RUN apk add --no-cache gcc musl-dev mariadb-connector-c-dev
# Pythonライブラリをインストール
COPY requirements.txt /code/
RUN --mount=type=cache,target=/root/.cache/pip pip3 install -r requirements.txt
# アプリケーションコードをコピー
COPY . .
# アプリケーションの起動に必要な環境変数を設定
EXPOSE 8000
ENV FLASK_APP=run.py
ENV FLASK_ENV=development
ENV PYTHONPATH=/code
FROM builder AS dev-envs
RUN apk add --no-cache git
CMD ["flask", "run", "--host=0.0.0.0", "--port=8000"]
docker-compose.yml
FlaskアプリケーションとMySQLデータベースを構成するDocker Compose設定です。
services:
db:
image: mysql:8
restart: always
environment:
MYSQL_ROOT_PASSWORD: my-secret-pw
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASS}
expose:
- "3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-p${DB_PASS}"]
interval: 5s
retries: 5
start_period: 30s
backend:
build:
context: ./backend
target: dev-envs
env_file:
- .env
ports:
- "8000:8000"
volumes:
- .:/code
depends_on:
db:
condition: service_healthy
environment:
- PYTHONPATH=${PYTHONPATH}
command: flask run --host=0.0.0.0 --port=8000
.env
アプリケーション全体で使用する環境変数を管理します。
DB_NAME=example_db
DB_USER=example_user
DB_PASS=example_password
PYTHONPATH=/code
run.py
Flaskアプリケーションのエントリーポイント。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello, World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
手順
1. 環境変数の設定
.env
ファイルを作成し、必要な環境変数を設定します。
2. Docker Composeでコンテナを起動
以下のコマンドでコンテナをビルドして起動します。
docker-compose up --build
3. 動作確認
ブラウザでhttp://localhost:8000
にアクセスし、無事動作しました。