Create a simple project python API with action :
- Create folder python-fastapi
- Create virtual environment python
- Generate file requierements.txt
- Create file Dockerfile
- Install requirements tools
- build image docker
├── app
│ └── main.py
├── Dockerfile
├── README.md
└── requirements.txt
mkdir python-fastapi
mkdir app
python3 -m venv venv
source venv/bin/activate
pip freeze > requirements.txt
touch main.py
from typing import Union
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
def read_root():
return ("Salut tout le monde")
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
if __name__ == "__main__":
uvicorn.run(app, port=8000, host="0.0.0.0")
touch Dockerfile
FROM python:3.10
WORKDIR /fastapi-app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY ./app ./app
CMD [ "python3", "./app/main.py" ]
docker build -t fastapi-app .
docker run -p 8000:8000 fastapi-app
docker exec -it id_contanier /bin/sh
export PROJECT_ID=kubernetes-366320
git clone https://github.com/akkaoui-abdou/python-fastapi.git
docker build -t us.gcr.io/${PROJECT_ID}/fastapi-app:v1 .
docker push us.gcr.io/${PROJECT_ID}/fastapi-app:v1
gcloud services enable containerregistry.googleapis.com
gcloud auth configure-docker
Create cluster:
gcloud config set compute/zone us-central1-a
gcloud container clusters create fastapi-cluster --num-nodes=1
gcloud container clusters get-credentials fastapi-cluster
Deployment application:
kubectl create deployment fastapi-app --image=us.gcr.io/${PROJECT_ID}/fastapi-app:v1
kubectl expose deployment fastapi-app --type LoadBalancer --port 8000 --target-port 8000
kubectl get service