From 33960f9678d7d0eebbea3520219e2216f80caefc Mon Sep 17 00:00:00 2001 From: vjanz Date: Wed, 14 Apr 2021 21:40:07 +0200 Subject: [PATCH] Add fastapi on the awesome-compose project Signed-off-by: vjanz --- fastapi/Dockerfile | 12 +++++++++ fastapi/README.md | 55 ++++++++++++++++++++++++++++++++++++++ fastapi/docker-compose.yml | 9 +++++++ fastapi/requirements.txt | 2 ++ fastapi/src/__init__.py | 0 fastapi/src/app.py | 11 ++++++++ 6 files changed, 89 insertions(+) create mode 100644 fastapi/Dockerfile create mode 100644 fastapi/README.md create mode 100644 fastapi/docker-compose.yml create mode 100644 fastapi/requirements.txt create mode 100644 fastapi/src/__init__.py create mode 100644 fastapi/src/app.py diff --git a/fastapi/Dockerfile b/fastapi/Dockerfile new file mode 100644 index 0000000..2823288 --- /dev/null +++ b/fastapi/Dockerfile @@ -0,0 +1,12 @@ +FROM python:3.8 + +WORKDIR /app + +RUN apt update + +COPY requirements.txt ./ +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +CMD ["uvicorn", "--host", "0.0.0.0", "--port", "8000", "src.app:app"] \ No newline at end of file diff --git a/fastapi/README.md b/fastapi/README.md new file mode 100644 index 0000000..5c26484 --- /dev/null +++ b/fastapi/README.md @@ -0,0 +1,55 @@ +## Compose sample application +### Python/FastAPI application + +Project structure: +``` +. +├── docker-compose.yaml +├── Dockerfile +├── requirements.txt +├── src +    ├── app.py +    ├── __init__.py + +``` + +[_docker-compose.yaml_](docker-compose.yaml) +``` +version: '3.7' +services: + api: + build: + context: . + dockerfile: Dockerfile + container_name: fastapi-service + ports: + - '8000:8000' +``` + +## Deploy with docker-compose + +```shell +docker-compose up -d --build +``` +## Expected result + +Listing containers must show one container running and the port mapping as below: +``` +$ docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +69893120c355 fastapi_api "uvicorn --host 0.0.…" About a minute ago Up About a minute 0.0.0.0:8000->8000/tcp fastapi-service +``` + +After the application starts, navigate to `http://localhost:8000` in your web browser and you should see the following json response: +``` +{ +"message": "OK" +} +``` + +Stop and remove the containers +``` +$ docker-compose down +``` + + diff --git a/fastapi/docker-compose.yml b/fastapi/docker-compose.yml new file mode 100644 index 0000000..147db4d --- /dev/null +++ b/fastapi/docker-compose.yml @@ -0,0 +1,9 @@ +version: '3.7' +services: + api: + build: + context: . + dockerfile: Dockerfile + container_name: fastapi-service + ports: + - '8000:8000' diff --git a/fastapi/requirements.txt b/fastapi/requirements.txt new file mode 100644 index 0000000..97dc7cd --- /dev/null +++ b/fastapi/requirements.txt @@ -0,0 +1,2 @@ +fastapi +uvicorn diff --git a/fastapi/src/__init__.py b/fastapi/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/fastapi/src/app.py b/fastapi/src/app.py new file mode 100644 index 0000000..f3084da --- /dev/null +++ b/fastapi/src/app.py @@ -0,0 +1,11 @@ +from fastapi import FastAPI +import uvicorn + +app = FastAPI(debug=True) + + +@app.get("/") +def hello_world(): + return {"message": "OK"} + +