DockerでfastAPIとMySQLの構築を練習
こんにちは!学生開発チームNineteenの代表をしている古谷洸樹です!
今日はHackU MeijoでFastAPIを使うことになったので環境構築をしてみました。Hello worldを出力するところまでを記事にします。
FastAPIをMySQLと接続してDockerで構築します。
注意点
この記事はDocker初心者が書いております。この記事を参考にする際はお気を付けください。
FastAPIとは
Pythonを使ってAPIを作成するためのフレームワーク
FlaskやDjangoよりも実装が手軽である
SwaggerでAPIの仕様書を作ってくれる
GitHub
ファイル構成
fastapi-practice -- app -- main.py
|
|-- Dockerfile
|
|-- docker-compose.yml
|
|-- requirements.txt
|
|-- README.md
Dockerfile
FROM python:3.9-slim
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY ./app/ .
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8080"]
docker-compose.yml
version: '3'
services:
api:
container_name: "fastapi-practice"
volumes:
- ./app
tty: true
build: .
ports:
- "8080:8080"
environment:
PYTHONDONTWRITEBYTECODE: 1
db:
image: mysql:8.0
platform: linux/x86_64 # M1 Macの場合必要
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' # rootアカウントをパスワードなしで作成
MYSQL_DATABASE: 'fastapi-practice-db' # 初期データベースとしてdemoを設定
TZ: 'Asia/Tokyo' # タイムゾーンを日本時間に設定
volumes:
- mysql_data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password # MySQL8.0ではデフォルトが"caching_sha2_password"で、ドライバが非対応のため変更
ports:
- 33306:3306 # ホストマシンのポート33306を、docker内のポート3306に接続する
volumes:
mysql_data:
セットアップ
Dockerでbuild
```bash
Docker-compose build
```
Dockerを起動(-dでバックで起動)
```bash
Docker-compose up -d
```
大変だったポイント
データベースはうまく動作したがfastAPIがDocker-compose upをしたときにもう一つappフォルダを作ってしまいそれを消すとDocker-compose upでエラーが出てしまっていた。
解決策
docker-compose.ymlのvolumesの中身を書き換えた。
前回
volumes:
- ./app:app
改善
volumes:
- ./app
課題点
AWSのEC2で将来的にデプロイできるのかを試すことができていない。
終わりに
ここまで読んでいただきありがとうございます。
自分の勉強の備忘録としてこの記事は書きましたが、誰かの参考になれば幸いです。もしよければスキなど頂けると喜びます。
この記事が気に入ったらサポートをしてみませんか?