Dockerを使った軽量なFastAPIの開発環境を構築
はじめに
最近FastAPIを使う機会がよくあり,Dockerでサクッと構築して使い捨てしたかったので
メモとして軽量で構築する方法を残したいと思います.
準備
- Docker及びDocker Composeが使える環境
$ docker --version
Docker version 19.03.8, build afacb8b7f0
- ファイル構成はこんな感じにします
.
├── Dockerfile
├── docker-compose.yml
├── main.py
└── requirements.txt
ソース
ここからcloneできます
https://github.com/sattosan/sample-fastapi-alpine
Dockerfile
alpineベースで作っています
FROM python:3.8-alpine
WORKDIR /app
COPY requirements.txt .
# コンテナ内で必要なパッケージをインストール
RUN apk add --no-cache build-base \
&& pip install --no-cache-dir --trusted-host pypi.python.org -r requirements.txt \
&& apk del build-base
COPY main.py .
EXPOSE 8000
# FastAPIを8000ポートで待機
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"]
Docker Compose
version: "3.0"
services:
# FastAPI
api:
container_name: "api"
build: .
restart: always
tty: true
ports:
- 8000:8000
必要なパッケージをまとめています
uvicorn
fastapi
サンプルコード
FastAPIのドキュメントにあるサンプルコードを用意しました
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
実行
$ docker-compose up -d --build
Docker Imageサイズの確認
- alpineベースのImageサイズ
docker images | grep api
latest bff0158b61ca 29 minutes ago 275MB
- 本家のImageサイズ
本家様を参考に構築した結果です
$ docker images | grep api
latest 878110f2207f 11 seconds ago 1.02GB
本家に比べて3.6倍軽減出来たことがわかります
動作確認
FastAPIで生成したAPIはSwaggerで自動的にドキュメント化されています
Swaggerで見てみる
ドメイン/docs
にアクセスするとドキュメントを見ることが出来ます
API叩いてみる
curlで叩くとこんな感じで返って来ます
$ curl localhost:8000
{"Hello":"World"}
おわりに
今回はalpineベースで軽量な開発環境を構築してみました.
本家より3.6倍軽量になるので,使い捨てには十分な環境だとは思います.
最近ではNetflixを始め様々なプロジェクトでFastAPIが使われ始めているので,
まだ使っていない人は是非使って見てください!
参考サイト
Author And Source
この問題について(Dockerを使った軽量なFastAPIの開発環境を構築), 我々は、より多くの情報をここで見つけました https://qiita.com/satto_sann/items/fcd3832a1fea2c607b85著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .