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"} + +