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+MySQLでDocker環境を構築

Posted at

概要

このドキュメントでは、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にアクセスし、無事動作しました。

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?