21
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

docker-composeでFastAPIの環境を構築する

Posted at

FastAPI?

モダンで高速なPythonのWebフレームワークだそうです。
最近人気らしいので業務で採用してました。

公式ドキュメント
https://github.com/tiangolo/fastapi

メンバーによって環境が違って導入をスムーズに進められなかったんですが、
Dockerを使ってみんなで同じ作業環境を共有できるようになったのでそのメモです。

作成したファイル

公式の手順に沿って進めていきます。

最終的にこんなファイル構造になっていればOKです。
超シンプル。
スクリーンショット 2020-03-30 16.30.06.png

Dockerfile

公式ドキュメントのInstallationの項目に記載されているモジュールをインストールさせます。
ビルト時に勝手に走るので手動で必要モジュールを探す必要なくて便利ですね。

Dockerfile
FROM python:3.7
WORKDIR /var/www/html
RUN pip install fastapi uvicorn

main.py

こちらもExampleの項目を参考に書きます。
ルートにアクセスされるとHelloWorldのオブジェクトを返却するAPIですね。

main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
  return {"Hello": "World"}

docker-compose.yaml

Dockerfilemain.pyの橋渡し的なことをしています。

Dockerfileを使ってPythonのモジュールをインストールした後、
Run itの項目を参考にしてFastAPIサーバを起動するコマンドを叩かせます。

ここではポート9004で起動するよう設定しています。

docker-compose.yaml
version: '3'

services:
  app:
    container_name: FastAPI
    build: ./docker
    volumes:
      - ./src:/var/www/html
    ports:
      - "9004:9004"
    command: uvicorn main:app --reload --host 0.0.0.0 --port 9004

動作確認

docker-composeでコンテナを起動・ビルドします。

$ docker-compose up --build

Creating network "docker_fastapi_default" with the default driver
Building app
Step 1/3 : FROM python:3.7
 ---> 879165535a54
Step 2/3 : WORKDIR /var/www/html
 ---> Using cache
 ---> 31d5c58e6177
Step 3/3 : RUN pip install fastapi uvicorn
 ---> Using cache
 ---> 430430eecf7f
Successfully built 430430eecf7f
Successfully tagged docker_fastapi_app:latest
Creating FastAPI ... done
Attaching to FastAPI
FastAPI | INFO:     Uvicorn running on http://0.0.0.0:9004 (Press CTRL+C to quit)
FastAPI | INFO:     Started reloader process [1]
FastAPI | INFO:     Started server process [7]
FastAPI | INFO:     Waiting for application startup.
FastAPI | INFO:     Application startup complete.

必要なモジュールがインストールされ、FastAPIサーバが起動しました。

curlコマンドでアクセスしてみましょう。


$ curl http://localhost:9004

{"Hello":"World"}

main.pyの定義通りの反応!

まとめ

FastAPIを使って簡単にAPIサーバを立ち上げられました!
Dockerを使えば少ないファイルで同じ環境を共有できるのもいいですね:sparkles:

Pythonではシェルスクリプトも実行できるので、
自動デプロイ用のコマンドとか実装して「擬似Jenkins」みたいなこともできて便利です。
Jenkins使えばいいじゃんとか言ってはいけない

参考URL

21
15
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
21
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?