Explorar o código

First demo version for FastAPI in Docker

Kirill Vercetti %!s(int64=3) %!d(string=hai) anos
achega
0d29dcbfb8
Modificáronse 3 ficheiros con 90 adicións e 0 borrados
  1. 48 0
      docker/Dockerfile
  2. 11 0
      docker/root/app/app.py
  3. 31 0
      docker/root/usr/local/bin/docker-entrypoint.sh

+ 48 - 0
docker/Dockerfile

@@ -0,0 +1,48 @@
+ARG PYVERSION=3.11
+ARG RELEASE=slim-bullseye
+
+FROM python:$PYVERSION-$RELEASE
+
+LABEL maintainer="Kirill Vercetti <office@kyzima-spb.com>"
+
+STOPSIGNAL SIGINT
+
+EXPOSE 5000
+
+ENV DEBIAN_FRONTEND noninteractive
+ENV PYTHONPATH "/python_packages:/app"
+ENV USER_UID 1000
+ENV USER_GID 1000
+ENV FASTAPI_APP app:app
+ENV FASTAPI_DEBUG 0
+
+WORKDIR /app
+
+RUN set -ex \
+    && apt update \
+    && apt install -yq --no-install-recommends \
+        gettext-base \
+        gosu \
+    && pip install \
+        --no-cache-dir \
+        --disable-pip-version-check \
+            fastapi \
+            "uvicorn[standard]" \
+            pythoninfo \
+    && apt-get clean  \
+    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+RUN set -ex \
+   && groupadd -g 1000 user \
+   && useradd -u 1000 -g user -s /bin/bash -m user
+
+ARG USEFUL_URL="https://kyzima-spb.github.io/docker-useful/"
+ADD $USEFUL_URL/switch-user/switch-user.sh /usr/local/bin/
+
+RUN set -ex \
+    && chmod 755 /usr/local/bin/*.sh
+
+COPY ./root /
+
+ENTRYPOINT ["docker-entrypoint.sh"]
+CMD ["runserver"]

+ 11 - 0
docker/root/app/app.py

@@ -0,0 +1,11 @@
+from fastapi import FastAPI
+from fastapi.responses import HTMLResponse
+from pythoninfo import pythoninfo
+
+
+app = FastAPI()
+
+
+@app.get('/', response_class=HTMLResponse)
+def info():
+    return pythoninfo()

+ 31 - 0
docker/root/usr/local/bin/docker-entrypoint.sh

@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+
+if [[ -z $USER_UID ]]; then
+  USER_UID=$(id -u)
+fi
+
+if [[ -z $USER_GID ]]; then
+  USER_GID=$(id -g)
+fi
+
+if [[ "$(id -u)" = '0' ]] && [[ "$USER_UID" != '0' ]]; then
+  exec switch-user.sh -v \
+    -d /app \
+    -e "$BASH_SOURCE" \
+      "$USER_UID:$USER_GID" "$*"
+fi
+
+if [[ "$1" = 'runserver' ]]; then
+  args=("$FASTAPI_APP" '--host' '0.0.0.0' '--port' '5000')
+
+  if [[ "$FASTAPI_DEBUG" != '0' ]]; then
+    args+=('--reload')
+    printf " * Mode:\tDevelopment\n"
+  else
+    printf " * Mode:\tProduction\n"
+  fi
+
+  exec uvicorn "${args[@]}"
+fi
+
+exec "$@"