DockerでFastAPI+別コンテナのMySQLの環境を構築してみる(Windows)
.png)
目次
開発環境
- OS:Windows11
- Docker Desktopインストール済み
- VSCodeインストール済み
MySQLは下記の記事で構築した別プロジェクトのコンテナ上で動いているものになります。
アプリケーションの定義ファイル(YAML)を作成
type nul > docker-compose.ymlエラーメッセージが表示されますが、YAMLファイルが作成されていれば問題ありません。
下記の内容でYAMLファイルを編集。
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000"
volumes:
- ./app:/app
networks:
- mysql_default
networks:
mysql_default:
external: true
Dockerファイルを作成
type nul > Dockerfileエラーメッセージが表示されますが、Dockerファイルが作成されていれば問題ありません。
下記の内容でDockerファイルを編集。
# ベースイメージを指定
FROM python:3.9
# 作業ディレクトリを作成
WORKDIR /app
# 必要なパッケージをインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# アプリケーションのソースコードをコピー
COPY . .
# アプリケーションを起動
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"]
requirements.txtを作成
type nul > requirements.txtエラーメッセージが表示されますが、requirements.txtが作成されていれば問題ありません。
下記の内容でrequirements.txtを編集。
uvicorn
fastapi
mysqlclient
sqlalchemy
appディレクトリを作成
mkdir app
db.pyを作成
type nul > app/db.pyMySQL接続用のコードを作成。
hostは別プロジェクトのMySQLコンテナ名です。
db_name、user、passwordは環境に合わせてください。
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session
host = "db:3306"
db_name = "odaneko"
user = "odaneko"
password = "odaneko"
DATABASE = 'mysql://%s:%s@%s/%s?charset=utf8' % (
user,
password,
host,
db_name,
)
ENGINE = create_engine(
DATABASE,
echo=True
)
session = scoped_session(
sessionmaker(
autocommit=False,
autoflush=False,
bind=ENGINE
)
)
Base = declarative_base()
Base.query = session.query_property()
main.pyを作成
type nul > app/main.pym_category1というテーブルから全レコード・全カラムを取得する簡単なプログラムを作成。
from fastapi import FastAPI
from db import session
from sqlalchemy import text
app = FastAPI()
@app.get("/mysql-test")
def mysql_test():
query = text("SELECT * FROM m_category1;")
records = session.execute(query).fetchall()
return [dict(record._mapping) for record in records]
コンテナをビルド・立ち上げ
docker compose up -d --build

Dockerの画面でコンテナがRunningになっていることも確認。

環境が構築できたか確認
下記のURLを開いて、レコードが取得できていたらOK。
http://localhost:3000/

以上になります。
お読み頂き、ありがとうございました。


-300x300.png)