見出し画像

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で将来的にデプロイできるのかを試すことができていない。

終わりに

ここまで読んでいただきありがとうございます。
自分の勉強の備忘録としてこの記事は書きましたが、誰かの参考になれば幸いです。もしよければスキなど頂けると喜びます。

この記事が気に入ったらサポートをしてみませんか?