Récemment, j'utilise souvent l'API Fast, et je voulais la construire rapidement avec Docker et la jeter. Pour mémoire, je voudrais laisser un moyen de le construire léger.
version
$ docker --version
Docker version 19.03.8, build afacb8b7f0
--La structure du fichier ressemble à ceci
organisation des fichiers
.
├── Dockerfile
├── docker-compose.yml
├── main.py
└── requirements.txt
Vous pouvez cloner à partir d'ici https://github.com/sattosan/sample-fastapi-alpine
Dockerfile Fabriqué à base alpine
Dockerfile
FROM python:3.8-alpine
WORKDIR /app
ADD requirements.txt .
#Installez les packages requis dans le conteneur
RUN apk add --no-cache build-base mariadb-connector-c-dev
# requirements.Installez les packages Python répertoriés dans txt
RUN pip install --no-cache-dir --trusted-host pypi.python.org -r requirements.txt
ADD main.py .
#Attendez l'API rapide sur le port 8000
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"]
Docker Compose
docker-compose.yml
version: "3.0"
services:
# FastAPI
api:
container_name: "api"
build: .
restart: always
tty: true
ports:
- 8000:8000
requirements.txt
uvicorn
fastapi
J'ai préparé l'exemple de code dans la documentation FastAPI (https://fastapi.tiangolo.com/)
main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
$ docker-compose up -d --build
--Taille d'image basée sur l'alpin
docker images | grep api
latest bff0158b61ca 29 minutes ago 275MB
C'est le résultat de la construction en référence à Honke.
$ docker images | grep api
latest 878110f2207f 11 seconds ago 1.02GB
Vous pouvez voir qu'il a été réduit de 3,6 fois par rapport à la famille d'origine
Les API générées par FastAPI sont automatiquement documentées par Swagger
Vous pouvez voir le document en accédant à domaine / docs
http://localhost:8000/docs
Si vous le frappez avec curl, il reviendra comme ça
résultat
$ curl localhost:8000
{"Hello":"World"}
Cette fois, j'ai essayé de créer un environnement de développement léger basé sur l'alpin.
Il est 3,6 fois plus léger que la maison d'origine, donc je pense que c'est un environnement suffisant pour une utilisation jetable. Récemment, FastAPI a commencé à être utilisé dans divers projets, dont Netflix. Si vous ne l'avez pas encore utilisé, essayez-le!
--Honke: https://fastapi.tiangolo.com/