Docker Composeを使用してFlaskとPostgreSQLをデプロイ
この記事では、Docker Composeを使用して、PostgreSQLデータベースをバックエンドとしたFlask Webアプリケーションをデプロイする例を紹介します。
ディレクトリ構造は次のとおりです。
flask_app/
├── app/
│ ├── __init__.py
│ ├── main.py
│ └── templates/
│ └── index.html
├── Dockerfile
├── docker-compose.yml
└── requirements.txt
コンテナの定義
- Flaskアプリケーションを作成(
app/main.py
)
app/main.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
- Flaskアプリケーションの基本的なテンプレートを作成(
app/templates/index.html
)
app/templates/index.html
<!DOCTYPE html>
<html>
<head>
<title>Flask App with PostgreSQL</title>
</head>
<body>
<h1>Welcome to our Flask app with PostgreSQL</h1>
</body>
</html>
- Flaskアプリケーション用の
Dockerfile
を作成
Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY app app
CMD ["python", "app/main.py"]
- 必要なPythonパッケージを
requirements.txt
ファイルに追加
requirements.txt
Flask==2.1.1
gunicorn==20.1.0
- FlaskアプリケーションとPostgreSQLサービスを定義する
docker-compose.yml
ファイルを作成
docker-compose.yml
version: '3.9'
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- db
db:
image: postgres:13-alpine
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: flask_db
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
この例では、web
とdb
の2つのサービスを定義しました。web
サービスは、現在のディレクトリのDockerfile
からビルドされるFlaskアプリケーションです。db
サービスは、公式のPostgreSQLイメージを使用し、ユーザー、パスワード、データベース名の環境変数が含まれています。また、PostgreSQLデータを永続化するために、名前付きボリューム(db_data
)を作成しました。
コンテナの実行
このFlaskアプリケーションをPostgreSQLと一緒にデプロイするには以下を実行します。
- Dockerイメージをビルド
bash
$ docker-compose build
- サービスを起動してコンテナを作成
bash
$ docker-compose up -d
これで、Flaskアプリケーションにhttp://localhost:5000
でアクセスできます。アプリケーションは、シンプルな「Welcome to our Flask app with PostgreSQL」というメッセージを表示します。
AlloyDB
Amazon Cognito
Amazon EC2
Amazon ECS
Amazon QuickSight
Amazon RDS
Amazon Redshift
Amazon S3
API
Autonomous Vehicle
AWS
AWS API Gateway
AWS Chalice
AWS Control Tower
AWS IAM
AWS Lambda
AWS VPC
BERT
BigQuery
Causal Inference
ChatGPT
Chrome Extension
CircleCI
Classification
Cloud Functions
Cloud IAM
Cloud Run
Cloud Storage
Clustering
CSS
Data Engineering
Data Modeling
Database
dbt
Decision Tree
Deep Learning
Descriptive Statistics
Differential Equation
Dimensionality Reduction
Discrete Choice Model
Docker
Economics
FastAPI
Firebase
GIS
git
GitHub
GitHub Actions
Google
Google Cloud
Google Search Console
Hugging Face
Hypothesis Testing
Inferential Statistics
Interval Estimation
JavaScript
Jinja
Kedro
Kubernetes
LightGBM
Linux
LLM
Mac
Machine Learning
Macroeconomics
Marketing
Mathematical Model
Meltano
MLflow
MLOps
MySQL
NextJS
NLP
Nodejs
NoSQL
ONNX
OpenAI
Optimization Problem
Optuna
Pandas
Pinecone
PostGIS
PostgreSQL
Probability Distribution
Product
Project
Psychology
Python
PyTorch
QGIS
R
ReactJS
Regression
Rideshare
SEO
Singer
sklearn
Slack
Snowflake
Software Development
SQL
Statistical Model
Statistics
Streamlit
Tabular
Tailwind CSS
TensorFlow
Terraform
Transportation
TypeScript
Urban Planning
Vector Database
Vertex AI
VSCode
XGBoost