Files
fastapi/docs/hi/docs/deployment/docker.md
T
452e526877 ЁЯМР Update translations for hi (update-outdated) (#16212)
Co-authored-by: pr-submit[bot] <pr-submit[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: pr-push[bot] <pr-push[bot]@users.noreply.github.com>
2026-08-19 10:58:07 +02:00

46 KiB
Raw Blame History

Containers рдореЗрдВ FastAPI - Docker

FastAPI applications deploy рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЖрдо рддрд░реАрдХрд╛ Linux container image рдмрдирд╛рдирд╛ рд╣реИред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдпрддрдГ Docker рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдЖрдк рдЙрд╕ container image рдХреЛ рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдореЗрдВ deploy рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Linux containers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рд▓рд╛рдн рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ security, replicability, simplicity, рдФрд░ рдЕрдиреНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

/// tip | рдЯрд┐рдк

рдЬрд▓реНрджреА рдореЗрдВ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рдм рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ? рдиреАрдЪреЗ рджрд┐рдП рдЧрдП Dockerfile рдкрд░ рдЬрд╛рдПрдБ ЁЯСЗ.

///

Dockerfile Preview ЁЯСА
FROM python:3.14

WORKDIR /code

COPY ./requirements.txt /code/requirements.txt

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

COPY ./app /code/app

CMD ["fastapi", "run", "app/main.py", "--port", "80"]

# рдпрджрд┐ Nginx рдпрд╛ Traefik рдЬреИрд╕реЗ proxy рдХреЗ рдкреАрдЫреЗ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ рддреЛ --proxy-headers рдЬреЛрдбрд╝реЗрдВ
# CMD ["fastapi", "run", "app/main.py", "--port", "80", "--proxy-headers"]

Container рдХреНрдпрд╛ рд╣реИ

Containers (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ Linux containers) applications рдХреЛ рдЙрдирдХреА рд╕рднреА dependencies рдФрд░ рдЖрд╡рд╢реНрдпрдХ files рд╕рд╣рд┐рдд package рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд lightweight рддрд░реАрдХрд╛ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА system рдореЗрдВ рджреВрд╕рд░реЗ containers (рджреВрд╕рд░реА applications рдпрд╛ components) рд╕реЗ isolated рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

Linux containers host (machine, virtual machine, cloud server, рдЖрджрд┐) рдХреЗ рдЙрд╕реА Linux kernel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд▓рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдмрд╕ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╡реЗ рдмрд╣реБрдд lightweight рд╣реЛрддреЗ рд╣реИрдВ (рдкреВрд░реЗ operating system рдХреЛ emulate рдХрд░рдиреЗ рд╡рд╛рд▓реА full virtual machines рдХреА рддреБрд▓рдирд╛ рдореЗрдВ)ред

рдЗрд╕ рддрд░рд╣, containers рдХрдо resources consume рдХрд░рддреЗ рд╣реИрдВ, рд▓рдЧрднрдЧ рдЙрддрдиреЗ рд╣реА рдЬрд┐рддрдиреЗ processes рдХреЛ рд╕реАрдзреЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд▓рдЧрддреЗ рд╣реИрдВ (virtual machine рдмрд╣реБрдд рдЕрдзрд┐рдХ consume рдХрд░реЗрдЧреА)ред

Containers рдХреЗ рдЕрдкрдиреЗ isolated running processes (рдЖрдорддреМрд░ рдкрд░ рд╕рд┐рд░реНрдл рдПрдХ process), file system, рдФрд░ network рднреА рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ deployment, security, development, рдЖрджрд┐ рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

Container Image рдХреНрдпрд╛ рд╣реИ

рдПрдХ container рдПрдХ container image рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

Container image рдЙрди рд╕рднреА files, environment variables, рдФрд░ default command/program рдХрд╛ static version рд╣реЛрддрд╛ рд╣реИ рдЬреЛ container рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ Static рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ container image рдЪрд▓ рдирд╣реАрдВ рд░рд╣реА рд╣реИ, execute рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл packaged files рдФрд░ metadata рд╣реИред

"container image" рдЬреЛ stored static contents рд╣реИ, рдЙрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, "container" рд╕рд╛рдорд╛рдиреНрдпрддрдГ running instance рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЪреАрдЬрд╝ рдЬреЛ execute рд╣реЛ рд░рд╣реА рд╣реИред

рдЬрдм container start рд╣реЛрдХрд░ running рд╣реЛрддрд╛ рд╣реИ (container image рд╕реЗ start рдХрд┐рдпрд╛ рдЧрдпрд╛), рддреЛ рдпрд╣ files, environment variables, рдЖрджрд┐ рдмрдирд╛ рдпрд╛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рд╡реЗ рдмрджрд▓рд╛рд╡ рдХреЗрд╡рд▓ рдЙрд╕ container рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди underlying container image рдореЗрдВ persist рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ (disk рдкрд░ save рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ)ред

Container image рдХреА рддреБрд▓рдирд╛ program file рдФрд░ contents рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬреИрд╕реЗ python рдФрд░ рдХреЛрдИ file main.pyред

рдФрд░ container рд╕реНрд╡рдпрдВ (container image рдХреЗ рд╡рд┐рдкрд░реАрдд) image рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ running instance рд╣реИ, рдЬрд┐рд╕рдХреА рддреБрд▓рдирд╛ process рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, container рдХреЗрд╡рд▓ рддрдм running рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЙрд╕рдореЗрдВ process running рд╣реЛ (рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ single process рд╣реЛрддрд╛ рд╣реИ)ред рдЬрдм рдЙрд╕рдореЗрдВ рдХреЛрдИ process running рдирд╣реАрдВ рд░рд╣рддрд╛, рддреЛ container stop рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

Container Images

Docker container images рдФрд░ containers рдмрдирд╛рдиреЗ рдФрд░ manage рдХрд░рдиреЗ рдХреЗ рдореБрдЦреНрдп tools рдореЗрдВ рд╕реЗ рдПрдХ рд░рд╣рд╛ рд╣реИред

рдФрд░ рдПрдХ public Docker Hub рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ tools, environments, databases, рдФрд░ applications рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдмрдиреА official container images рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ official Python Image рд╣реИред

рдФрд░ databases рдЬреИрд╕реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдиреНрдп images рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

рдкрд╣рд▓реЗ рд╕реЗ рдмрдиреА container image рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ tools рдХреЛ combine рдФрд░ use рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирдпрд╛ database try рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдзрд┐рдХрддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк official images рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд┐рд░реНрдл environment variables рд╕реЗ configure рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рддрд░рд╣, рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк containers рдФрд░ Docker рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ knowledge рдХреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ tools рдФрд░ components рдХреЗ рд╕рд╛рде reuse рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рддреЛ, рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде multiple containers рдЪрд▓рд╛рдПрдБрдЧреЗ, рдЬреИрд╕реЗ database, Python application, React frontend application рд╡рд╛рд▓рд╛ web server, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдирдХреЗ internal network рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ connect рдХрд░реЗрдВрдЧреЗред

рд╕рднреА container management systems (рдЬреИрд╕реЗ Docker рдпрд╛ Kubernetes) рдореЗрдВ рдпреЗ networking features integrated рд╣реЛрддреЗ рд╣реИрдВред

Containers рдФрд░ Processes

рдПрдХ container image рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЕрдкрдиреЗ metadata рдореЗрдВ default program рдпрд╛ command рд╢рд╛рдорд┐рд▓ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕реЗ container start рд╣реЛрдиреЗ рдкрд░ run рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЙрд╕ program рдХреЛ pass рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ parametersред рдпрд╣ рдмрд╣реБрдд рд╣рдж рддрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ command line рдореЗрдВ рд╣реЛрддрд╛ред

рдЬрдм рдХреЛрдИ container start рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЙрд╕ command/program рдХреЛ run рдХрд░реЗрдЧрд╛ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдк рдЗрд╕реЗ override рдХрд░рдХреЗ рдХреЛрдИ рдЕрд▓рдЧ command/program run рдХрд░рд╡рд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред

Container рддрдм рддрдХ running рд░рд╣рддрд╛ рд╣реИ рдЬрдм рддрдХ main process (command рдпрд╛ program) running рд░рд╣рддрд╛ рд╣реИред

Container рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпрддрдГ single process рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди main process рд╕реЗ subprocesses start рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдЙрд╕реА container рдореЗрдВ multiple processes рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдПрдХ running process рдХреЗ рдмрд┐рдирд╛ running container рд╣реЛрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ main process stop рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ container stop рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

FastAPI рдХреЗ рд▓рд┐рдП Docker Image рдмрдирд╛рдПрдБ

рдареАрдХ рд╣реИ, рдЕрдм рдХреБрдЫ рдмрдирд╛рддреЗ рд╣реИрдВ! ЁЯЪА

рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдБрдЧрд╛ рдХрд┐ official Python image рдкрд░ рдЖрдзрд╛рд░рд┐рдд FastAPI рдХреЗ рд▓рд┐рдП scratch рд╕реЗ Docker image рдХреИрд╕реЗ рдмрдирд╛рдПрдБред

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдк рдЕрдзрд┐рдХрддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • Kubernetes рдпрд╛ рд╕рдорд╛рди tools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп
  • Raspberry Pi рдкрд░ рдЪрд▓рд╛рддреЗ рд╕рдордп
  • рдРрд╕рд╛ cloud service рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП container image run рдХрд░реЗрдЧрд╛, рдЖрджрд┐ред

Package Requirements

рдЬрдм рдЖрдк рдЕрдкрдирд╛ project uv рд╕реЗ manage рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреА direct dependencies pyproject.toml рдореЗрдВ declared рд╣реЛрддреА рд╣реИрдВ рдФрд░ exact resolved versions uv.lock рдореЗрдВ stored рд╣реЛрддреЗ рд╣реИрдВред

рдЖрдк рдЕрдкрдиреА application рдХреЗ рд▓рд┐рдП required packages рдЗрд╕ рддрд░рд╣ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

$ uv add "fastapi[standard]" pydantic
---> 100%

/// note | рдиреЛрдЯ

рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ Dockerfile container рдХреЗ рдЕрдВрджрд░ pip рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЕрдкрдиреЗ uv project рд╕реЗ locked dependencies рдХреЛ рдЙрд╕рдХреЗ expected requirements.txt format рдореЗрдВ export рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

$ uv export --format requirements-txt --no-dev --no-emit-project --output-file requirements.txt

Generated requirements.txt container build рдХреЗ рд▓рд┐рдП рдПрдХ export рд╣реИред Dependencies рдХреЛ uv add рд╕реЗ manage рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ рдФрд░ рдЬрдм uv.lock change рд╣реЛ рддреЛ рдЗрд╕реЗ regenerate рдХрд░реЗрдВред

///

FastAPI Code рдмрдирд╛рдПрдБ

  • рдПрдХ app directory рдмрдирд╛рдПрдБ рдФрд░ рдЙрд╕рдореЗрдВ enter рдХрд░реЗрдВред
  • рдПрдХ рдЦрд╛рд▓реА file __init__.py рдмрдирд╛рдПрдБред
  • рдПрдХ main.py file рдмрдирд╛рдПрдБ рдЬрд┐рд╕рдореЗрдВ рд╣реЛ:
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
    return {"item_id": item_id, "q": q}

Dockerfile

рдЕрдм рдЙрд╕реА project directory рдореЗрдВ рдПрдХ file Dockerfile рдмрдирд╛рдПрдБ рдЬрд┐рд╕рдореЗрдВ рд╣реЛ:

# (1)!
FROM python:3.14

# (2)!
WORKDIR /code

# (3)!
COPY ./requirements.txt /code/requirements.txt

# (4)!
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

# (5)!
COPY ./app /code/app

# (6)!
CMD ["fastapi", "run", "app/main.py", "--port", "80"]
  1. Official Python base image рд╕реЗ start рдХрд░реЗрдВред

  2. Current working directory рдХреЛ /code рдкрд░ set рдХрд░реЗрдВред

    рдпрд╣реА рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╣рдо requirements.txt file рдФрд░ app directory рд░рдЦреЗрдВрдЧреЗред

  3. Requirements рд╡рд╛рд▓реА file рдХреЛ /code directory рдореЗрдВ copy рдХрд░реЗрдВред

    рдкрд╣рд▓реЗ рдХреЗрд╡рд▓ requirements рд╡рд╛рд▓реА file copy рдХрд░реЗрдВ, рдмрд╛рдХреА code рдирд╣реАрдВред

    рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ file рдЕрдХреНрд╕рд░ change рдирд╣реАрдВ рд╣реЛрддреА, Docker рдЗрд╕реЗ detect рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕ step рдХреЗ рд▓рд┐рдП cache рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЕрдЧрд▓реЗ step рдХреЗ рд▓рд┐рдП рднреА cache enable рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

  4. Requirements file рдореЗрдВ package dependencies install рдХрд░реЗрдВред

    --no-cache-dir option pip рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ downloaded packages рдХреЛ locally save рди рдХрд░реЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рдЬрдм pip рдХреЛ рдЙрдиреНрд╣реАрдВ packages рдХреЛ install рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ run рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реЛ, рд▓реЗрдХрд┐рди containers рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред

    /// note | рдиреЛрдЯ

    --no-cache-dir рдХреЗрд╡рд▓ pip рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЗрд╕рдХрд╛ Docker рдпрд╛ containers рд╕реЗ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИред

    ///

    --upgrade option pip рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ packages рдкрд╣рд▓реЗ рд╕реЗ installed рд╣реИрдВ рддреЛ рдЙрдиреНрд╣реЗрдВ upgrade рдХрд░реЗред

    рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рдЫрд▓рд╛ step рдЬрд┐рд╕рдореЗрдВ file copy рдХреА рдЧрдИ рдереА Docker cache рджреНрд╡рд╛рд░рд╛ detect рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ step рднреА available рд╣реЛрдиреЗ рдкрд░ Docker cache рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

    рдЗрд╕ step рдореЗрдВ cache рдХрд╛ рдЙрдкрдпреЛрдЧ development рдХреЗ рджреМрд░рд╛рди image рдмрд╛рд░-рдмрд╛рд░ build рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХрд╛ рдмрд╣реБрдд рд╕рдордп рдмрдЪрд╛рдПрдЧрд╛, рд╣рд░ рдмрд╛рд░ рд╕рднреА dependencies рдХреЛ download рдФрд░ install рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред

  5. ./app directory рдХреЛ /code directory рдХреЗ рдЕрдВрджрд░ copy рдХрд░реЗрдВред

    рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╕рд╛рд░рд╛ code рд╣реИ, рдФрд░ рдпрд╣реА рд╡рд╣ рдЪреАрдЬрд╝ рд╣реИ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ change рд╣реЛрддреА рд╣реИ, Docker cache рдЗрд╕ рдпрд╛ рдХрд┐рд╕реА рднреА рдЖрдЧреЗ рдХреЗ steps рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

    рдЗрд╕рд▓рд┐рдП, container image build times optimize рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ Dockerfile рдХреЗ end рдХреЗ рдкрд╛рд╕ рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

  6. command set рдХрд░реЗрдВ рддрд╛рдХрд┐ fastapi run рдЙрдкрдпреЛрдЧ рд╣реЛ, рдЬреЛ рдЕрдВрджрд░ рд╕реЗ Uvicorn рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

    CMD strings рдХреА list рд▓реЗрддрд╛ рд╣реИ, рдЗрди strings рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк command line рдореЗрдВ spaces рд╕реЗ рдЕрд▓рдЧ рдХрд░рдХреЗ type рдХрд░реЗрдВрдЧреЗред

    рдпрд╣ command current working directory рд╕реЗ run рд╣реЛрдЧрд╛, рд╡рд╣реА /code directory рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдКрдкрд░ WORKDIR /code рд╕реЗ set рдХрд┐рдпрд╛ рд╣реИред

/// tip | рдЯрд┐рдк

Code рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ number bubble рдкрд░ click рдХрд░рдХреЗ review рдХрд░реЗрдВ рдХрд┐ рд╣рд░ line рдХреНрдпрд╛ рдХрд░рддреА рд╣реИред ЁЯСЖ

///

/// warning | рдЪреЗрддрд╛рд╡рдиреА

рдиреАрдЪреЗ рд╕рдордЭрд╛рдП рдЕрдиреБрд╕рд╛рд░, CMD instruction рдХрд╛ exec form рд╣рдореЗрд╢рд╛ use рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред

///

CMD рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - Exec Form

CMD Docker instruction рджреЛ forms рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

тЬЕ Exec form:

# тЬЕ рдпрд╣ рдХрд░реЗрдВ
CMD ["fastapi", "run", "app/main.py", "--port", "80"]

тЫФя╕П Shell form:

# тЫФя╕П рдпрд╣ рди рдХрд░реЗрдВ
CMD fastapi run app/main.py --port 80

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ FastAPI gracefully shutdown рдХрд░ рд╕рдХреЗ рдФрд░ lifespan events trigger рд╣реЛрдВ, рд╣рдореЗрд╢рд╛ exec form use рдХрд░реЗрдВред

рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ shell рдФрд░ exec form рдХреЗ рд▓рд┐рдП Docker docs рдореЗрдВ рдФрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

docker compose рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдХрд╛рдлреА noticeable рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХ technical details рдХреЗ рд▓рд┐рдП рдпрд╣ Docker Compose FAQ section рджреЗрдЦреЗрдВ: рдореЗрд░реА services рдХреЛ recreate рдпрд╛ stop рд╣реЛрдиреЗ рдореЗрдВ 10 seconds рдХреНрдпреЛрдВ рд▓рдЧрддреЗ рд╣реИрдВ?.

Directory Structure

рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реА directory structure рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

.
тФЬтФАтФА app
тФВ┬а┬а тФЬтФАтФА __init__.py
тФВ   тФФтФАтФА main.py
тФЬтФАтФА Dockerfile
тФФтФАтФА requirements.txt

TLS Termination Proxy рдХреЗ рдкреАрдЫреЗ

рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ container Nginx рдпрд╛ Traefik рдЬреИрд╕реЗ TLS Termination Proxy (load balancer) рдХреЗ рдкреАрдЫреЗ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ option --proxy-headers рдЬреЛрдбрд╝реЗрдВ, рдпрд╣ Uvicorn (FastAPI CLI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЙрд╕ proxy рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП headers рдкрд░ trust рдХрд░реЗ, рдЬреЛ рдЙрд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ application HTTPS рдХреЗ рдкреАрдЫреЗ рдЪрд▓ рд░рд╣реА рд╣реИ, рдЖрджрд┐ред

CMD ["fastapi", "run", "app/main.py", "--proxy-headers", "--port", "80"]

Docker Cache

рдЗрд╕ Dockerfile рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг trick рд╣реИ, рд╣рдо рдкрд╣рд▓реЗ рдХреЗрд╡рд▓ dependencies рд╡рд╛рд▓реА file copy рдХрд░рддреЗ рд╣реИрдВ, рдмрд╛рдХреА code рдирд╣реАрдВред рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдБ рдХреНрдпреЛрдВред

COPY ./requirements.txt /code/requirements.txt

Docker рдФрд░ рдЕрдиреНрдп tools рдЗрди container images рдХреЛ incrementally build рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ layer рдХреЗ рдКрдкрд░ рджреВрд╕рд░реА layer рдЬреЛрдбрд╝рддреЗ рд╣реБрдП, Dockerfile рдХреЗ top рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ рдФрд░ Dockerfile рдХреЗ рдкреНрд░рддреНрдпреЗрдХ instruction рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдХреЛрдИ рднреА files рдЬреЛрдбрд╝рддреЗ рд╣реБрдПред

Docker рдФрд░ рд╕рдорд╛рди tools image build рдХрд░рддреЗ рд╕рдордп internal cache рднреА use рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рдХреЛрдИ file рдкрд┐рдЫрд▓реА рдмрд╛рд░ container image build рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ change рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рддреЛ рд╡рд╣ file рдХреЛ рдлрд┐рд░ рд╕реЗ copy рдХрд░рдиреЗ рдФрд░ scratch рд╕реЗ рдирдИ layer рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдмрдирд╛рдИ рдЧрдИ рдЙрд╕реА layer рдХреЛ reuse рдХрд░реЗрдЧрд╛ред

рд╕рд┐рд░реНрдл files copy рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдХрд░ рджреЗ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕рдиреЗ рдЙрд╕ step рдХреЗ рд▓рд┐рдП cache use рдХрд┐рдпрд╛, рд╡рд╣ рдЕрдЧрд▓реЗ step рдХреЗ рд▓рд┐рдП cache use рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣ рдЙрд╕ instruction рдХреЗ рд▓рд┐рдП cache use рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ dependencies install рдХрд░рддрд╛ рд╣реИ:

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

Package requirements рд╡рд╛рд▓реА file рдЕрдХреНрд╕рд░ change рдирд╣реАрдВ рд╣реЛрдЧреАред рдЗрд╕рд▓рд┐рдП, рдХреЗрд╡рд▓ рдЙрд╕ file рдХреЛ copy рдХрд░рдХреЗ, Docker рдЙрд╕ step рдХреЗ рд▓рд┐рдП cache use рдХрд░ рдкрд╛рдПрдЧрд╛ред

рдФрд░ рдлрд┐рд░, Docker рдЙрди dependencies рдХреЛ download рдФрд░ install рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдЧрд▓реЗ step рдХреЗ рд▓рд┐рдП cache use рдХрд░ рдкрд╛рдПрдЧрд╛ред рдФрд░ рдпрд╣реАрдВ рд╣рдо рдмрд╣реБрдд рд╕рдордп рдмрдЪрд╛рддреЗ рд╣реИрдВред тЬи ...рдФрд░ рдЗрдВрддрдЬрд╝рд╛рд░ рдХреА рдмреЛрд░рд┐рдпрдд рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВред ЁЯШкЁЯШЖ

Package dependencies рдХреЛ download рдФрд░ install рдХрд░рдиреЗ рдореЗрдВ minutes рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди cache рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХрддрдо seconds рд▓рдЧреЗрдВрдЧреЗред

рдФрд░ рдХреНрдпреЛрдВрдХрд┐ development рдХреЗ рджреМрд░рд╛рди рдЖрдк рдЕрдкрдиреЗ code changes рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдпрд╣ check рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП container image рдмрд╛рд░-рдмрд╛рд░ build рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░рд╛ рдЬрдорд╛ рд╣реБрдЖ рд╕рдордп рдмрдЪреЗрдЧрд╛ред

рдлрд┐рд░, Dockerfile рдХреЗ end рдХреЗ рдкрд╛рд╕, рд╣рдо рд╕рд╛рд░рд╛ code copy рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣реА рд╡рд╣ рдЪреАрдЬрд╝ рд╣реИ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ change рд╣реЛрддреА рд╣реИ, рд╣рдо рдЗрд╕реЗ end рдХреЗ рдкрд╛рд╕ рд░рдЦрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЗрд╕ step рдХреЗ рдмрд╛рдж рдХреБрдЫ рднреА cache use рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ред

COPY ./app /code/app

Docker Image Build рдХрд░реЗрдВ

рдЕрдм рдЬрдм рд╕рднреА files рдЕрдкрдиреА рдЬрдЧрд╣ рдкрд░ рд╣реИрдВ, рдЪрд▓рд┐рдП container image build рдХрд░рддреЗ рд╣реИрдВред

  • Project directory рдореЗрдВ рдЬрд╛рдПрдБ (рдЬрд╣рд╛рдБ рдЖрдкрдХрд╛ Dockerfile рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреА app directory рд╣реИ)ред
  • рдЕрдкрдиреА FastAPI image build рдХрд░реЗрдВ:
$ docker build -t myimage .

---> 100%

/// tip | рдЯрд┐рдк

рдЕрдВрдд рдореЗрдВ . рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ ./ рдХреЗ equivalent рд╣реИ, рдпрд╣ Docker рдХреЛ container image build рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП use рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА directory рдмрддрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╡рд╣реА current directory (.) рд╣реИред

///

Docker Container Start рдХрд░реЗрдВ

  • рдЕрдкрдиреА image рдкрд░ рдЖрдзрд╛рд░рд┐рдд container run рдХрд░реЗрдВ:
$ docker run -d --name mycontainer -p 80:80 myimage

рдЗрд╕реЗ Check рдХрд░реЗрдВ

рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ Docker container рдХреЗ URL рдореЗрдВ check рдХрд░ рдкрд╛рдПрдБрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: http://192.168.99.100/items/5?q=somequery рдпрд╛ http://127.0.0.1/items/5?q=somequery (рдпрд╛ equivalent, рдЕрдкрдиреЗ Docker host рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред

рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

{"item_id": 5, "q": "somequery"}

Interactive API docs

рдЕрдм рдЖрдк http://192.168.99.100/docs рдпрд╛ http://127.0.0.1/docs (рдпрд╛ equivalent, рдЕрдкрдиреЗ Docker host рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк automatic interactive API documentation рджреЗрдЦреЗрдВрдЧреЗ (Swagger UI рджреНрд╡рд╛рд░рд╛ provided):

Swagger UI

Alternative API docs

рдФрд░ рдЖрдк http://192.168.99.100/redoc рдпрд╛ http://127.0.0.1/redoc (рдпрд╛ equivalent, рдЕрдкрдиреЗ Docker host рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдкрд░ рднреА рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк alternative automatic documentation рджреЗрдЦреЗрдВрдЧреЗ (ReDoc рджреНрд╡рд╛рд░рд╛ provided):

ReDoc

Single-File FastAPI рдХреЗ рд╕рд╛рде Docker Image рдмрдирд╛рдПрдБ

рдпрджрд┐ рдЖрдкрдХреА FastAPI рдПрдХ single file рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ./app directory рдХреЗ рдмрд┐рдирд╛ main.py, рддреЛ рдЖрдкрдХреА file structure рдРрд╕реА рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:

.
тФЬтФАтФА Dockerfile
тФЬтФАтФА main.py
тФФтФАтФА requirements.txt

рдлрд┐рд░ рдЖрдкрдХреЛ рдмрд╕ Dockerfile рдХреЗ рдЕрдВрджрд░ file copy рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд paths рдмрджрд▓рдиреЗ рд╣реЛрдВрдЧреЗ:

FROM python:3.14

WORKDIR /code

COPY ./requirements.txt /code/requirements.txt

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

# (1)!
COPY ./main.py /code/

# (2)!
CMD ["fastapi", "run", "main.py", "--port", "80"]
  1. main.py file рдХреЛ рд╕реАрдзреЗ /code directory рдореЗрдВ copy рдХрд░реЗрдВ (рдмрд┐рдирд╛ рдХрд┐рд╕реА ./app directory рдХреЗ)ред

  2. Single file main.py рдореЗрдВ рдЕрдкрдиреА application serve рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП fastapi run use рдХрд░реЗрдВред

рдЬрдм рдЖрдк file рдХреЛ fastapi run рдореЗрдВ pass рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ automatically detect рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ single file рд╣реИ рдФрд░ рдХрд┐рд╕реА package рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдЬрд╛рди рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ import рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЖрдкрдХреА FastAPI app рдХреЛ serve рдХрд░рдирд╛ рд╣реИред ЁЯШО

Deployment Concepts

рдЖрдЗрдП containers рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЙрдиреНрд╣реАрдВ рдХреБрдЫ Deployment Concepts рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВред

Containers рдореБрдЦреНрдп рд░реВрдк рд╕реЗ application рдХреЛ build рдФрд░ deploy рдХрд░рдиреЗ рдХреА process рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХрд╛ tool рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЗрди deployment concepts рдХреЛ handle рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ particular approach enforce рдирд╣реАрдВ рдХрд░рддреЗ, рдФрд░ рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд strategies рд╣реИрдВред

рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рд░ рдЕрд▓рдЧ strategy рдХреЗ рд╕рд╛рде рд╕рднреА deployment concepts рдХреЛ cover рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред ЁЯОЙ

рдЖрдЗрдП рдЗрди deployment concepts рдХреЛ containers рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ review рдХрд░реЗрдВ:

  • HTTPS
  • startup рдкрд░ Running
  • Restarts
  • Replication (running processes рдХреА рд╕рдВрдЦреНрдпрд╛)
  • Memory
  • Start рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ previous steps

HTTPS

рдпрджрд┐ рд╣рдо FastAPI application рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл container image (рдФрд░ рдмрд╛рдж рдореЗрдВ running container) рдкрд░ focus рдХрд░реЗрдВ, рддреЛ HTTPS рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдХрд┐рд╕реА рдЕрдиреНрдп tool рджреНрд╡рд╛рд░рд╛ externally handle рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рдХреЛрдИ рджреВрд╕рд░рд╛ container рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Traefik рдХреЗ рд╕рд╛рде, рдЬреЛ HTTPS рдФрд░ certificates рдХреА automatic acquisition handle рдХрд░рддрд╛ рд╣реИред

/// tip | рдЯрд┐рдк

Traefik рдХреЗ Docker, Kubernetes, рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде integrations рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ containers рдХреЗ рд▓рд┐рдП HTTPS set up рдФрд░ configure рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

///

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, HTTPS рдХреЛ рдХрд┐рд╕реА cloud provider рджреНрд╡рд╛рд░рд╛ рдЙрдирдХреА services рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ handle рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (application рдЕрднреА рднреА container рдореЗрдВ рдЪрд▓ рд░рд╣реА рд╣реЛ)ред

Startup рдкрд░ Running рдФрд░ Restarts

рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдХреЛрдИ рджреВрд╕рд░рд╛ tool рдЖрдкрдХреЗ container рдХреЛ start рдФрд░ run рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП charge рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рд╕реАрдзреЗ Docker, Docker Compose, Kubernetes, рдХреЛрдИ cloud service, рдЖрджрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдзрд┐рдХрддрд░ (рдпрд╛ рд╕рднреА) рдорд╛рдорд▓реЛрдВ рдореЗрдВ, startup рдкрд░ container run рдХрд░рдиреЗ рдФрд░ failures рдкрд░ restarts enable рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ simple option рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Docker рдореЗрдВ рдпрд╣ command line option --restart рд╣реИред

Containers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, applications рдХреЛ startup рдкрд░ рдФрд░ restarts рдХреЗ рд╕рд╛рде run рдХрд░рд╛рдирд╛ cumbersome рдФрд░ difficult рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди containers рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЕрдзрд┐рдХрддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ functionality default рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИред тЬи

Replication - Processes рдХреА рд╕рдВрдЦреНрдпрд╛

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ machines рдХрд╛ cluster рд╣реИ рдЬрд┐рд╕рдореЗрдВ Kubernetes, Docker Swarm Mode, Nomad, рдпрд╛ multiple machines рдкрд░ distributed containers manage рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп similar complex system рд╣реИ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдкреНрд░рддреНрдпреЗрдХ container рдореЗрдВ process manager (рдЬреИрд╕реЗ workers рдХреЗ рд╕рд╛рде Uvicorn) рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп cluster level рдкрд░ replication handle рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

Kubernetes рдЬреИрд╕реЗ distributed container management systems рдореЗрдВ incoming requests рдХреЗ рд▓рд┐рдП load balancing support рдХрд░рддреЗ рд╣реБрдП containers рдХреА replication handle рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ integrated рддрд░реАрдХрд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рд╣реЛрддрд╛ рд╣реИред рд╕рдм cluster level рдкрд░ред

рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рд╢рд╛рдпрдж рдКрдкрд░ рд╕рдордЭрд╛рдП рдЕрдиреБрд╕рд╛рд░ scratch рд╕реЗ Docker image build рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдЕрдкрдиреА dependencies install рдХрд░рдХреЗ, рдФрд░ multiple Uvicorn workers рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп single Uvicorn process run рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

Load Balancer

Containers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдХреЛрдИ component рд╣реЛрдЧрд╛ рдЬреЛ main port рдкрд░ listening рдХрд░ рд░рд╣рд╛ рд╣реЛрдЧрд╛ред рд╕рдВрднрд╡рддрдГ рдпрд╣ рдХреЛрдИ рджреВрд╕рд░рд╛ container рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ HTTPS handle рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TLS Termination Proxy рднреА рд╣реЛ, рдпрд╛ рдХреЛрдИ similar toolред

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ component requests рдХрд╛ load рд▓реЗрдЧрд╛ рдФрд░ рдЙрд╕реЗ workers рдореЗрдВ (рдЙрдореНрдореАрдж рд╣реИ) balanced рддрд░реАрдХреЗ рд╕реЗ distribute рдХрд░реЗрдЧрд╛, рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдпрддрдГ Load Balancer рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

/// tip | рдЯрд┐рдк

HTTPS рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд╣реА TLS Termination Proxy component рд╢рд╛рдпрдж Load Balancer рднреА рд╣реЛрдЧрд╛ред

///

рдФрд░ containers рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЙрдиреНрд╣реЗрдВ start рдФрд░ manage рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЬреЛ system use рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдЙрд╕ load balancer (рдЬреЛ TLS Termination Proxy рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рд╕реЗ рдЖрдкрдХреА app рд╡рд╛рд▓реЗ container(s) рддрдХ network communication (рдЬреИрд╕реЗ HTTP requests) transmit рдХрд░рдиреЗ рдХреЗ internal tools рдкрд╣рд▓реЗ рд╕реЗ рд╣реЛрдВрдЧреЗред

One Load Balancer - Multiple Worker Containers

Kubernetes рдпрд╛ similar distributed container management systems рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЙрдирдХреЗ internal networking mechanisms рдХрд╛ рдЙрдкрдпреЛрдЧ main port рдкрд░ listening рдХрд░рдиреЗ рд╡рд╛рд▓реЗ single load balancer рдХреЛ communication (requests) рдЖрдкрдХреА app рдЪрд▓рд╛ рд░рд╣реЗ рд╕рдВрднрд╡рддрдГ multiple containers рддрдХ transmit рдХрд░рдиреЗ рджреЗрдЧрд╛ред

рдЖрдкрдХреА app рдЪрд▓рд╛ рд░рд╣реЗ рдЗрди containers рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рд╕рд┐рд░реНрдл рдПрдХ process рд╣реЛрдЧрд╛ (рдЬреИрд╕реЗ рдЖрдкрдХреА FastAPI application рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ Uvicorn process)ред рд╡реЗ рд╕рднреА identical containers рд╣реЛрдВрдЧреЗ, рд╡рд╣реА рдЪреАрдЬрд╝ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЕрдкрдирд╛ process, memory, рдЖрджрд┐ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдЖрдк CPU рдХреЗ different cores рдореЗрдВ, рдпрд╛ рдпрд╣рд╛рдБ рддрдХ рдХрд┐ different machines рдореЗрдВ parallelization рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдБрдЧреЗред

рдФрд░ load balancer рд╡рд╛рд▓рд╛ distributed container system requests рдХреЛ рдЖрдкрдХреА app рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ container рддрдХ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ distribute рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ request рдЖрдкрдХреА app рдЪрд▓рд╛ рд░рд╣реЗ multiple replicated containers рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рджреНрд╡рд╛рд░рд╛ handle рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдФрд░ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдпрд╣ load balancer рдЖрдкрдХреЗ cluster рдореЗрдВ other apps рдкрд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА requests handle рдХрд░ рдкрд╛рдПрдЧрд╛ (рдЬреИрд╕реЗ рдЕрд▓рдЧ domain рдкрд░, рдпрд╛ рдЕрд▓рдЧ URL path prefix рдХреЗ рддрд╣рдд), рдФрд░ рдЙрд╕ communication рдХреЛ рдЖрдкрдХреЗ cluster рдореЗрдВ рдЪрд▓ рд░рд╣реА рдЙрд╕ other application рдХреЗ рд╕рд╣реА containers рддрдХ transmit рдХрд░реЗрдЧрд╛ред

рдкреНрд░рддрд┐ Container рдПрдХ Process

рдЗрд╕ рддрд░рд╣ рдХреЗ scenario рдореЗрдВ, рдЖрдк рд╢рд╛рдпрдж рдкреНрд░рддрд┐ container рдПрдХ single (Uvicorn) process рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА cluster level рдкрд░ replication handle рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗред

рддреЛ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк container рдореЗрдВ multiple workers рдирд╣реАрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП --workers command line option рдХреЗ рд╕рд╛рдеред рдЖрдк рдкреНрд░рддрд┐ container рдмрд╕ single Uvicorn process рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ (рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж multiple containers)ред

Container рдХреЗ рдЕрдВрджрд░ рдПрдХ рдФрд░ process manager рд░рдЦрдирд╛ (рдЬреИрд╕рд╛ multiple workers рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛) рдХреЗрд╡рд▓ unnecessary complexity рдЬреЛрдбрд╝реЗрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЕрдкрдиреЗ cluster system рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрднрд╛рд▓ рд░рд╣реЗ рд╣реИрдВред

Multiple Processes рд╡рд╛рд▓реЗ Containers рдФрд░ Special Cases

рдмреЗрд╢рдХ, рдРрд╕реЗ special cases рд╣реИрдВ рдЬрд╣рд╛рдБ рдЖрдк рдЕрдВрджрд░ рдХрдИ Uvicorn worker processes рд╡рд╛рд▓рд╛ container рд░рдЦрдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк run рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ workers рдХреА рд╕рдВрдЦреНрдпрд╛ set рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП --workers command line option рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

FROM python:3.14

WORKDIR /code

COPY ./requirements.txt /code/requirements.txt

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

COPY ./app /code/app

# (1)!
CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"]
  1. рдпрд╣рд╛рдБ рд╣рдо workers рдХреА рд╕рдВрдЦреНрдпрд╛ 4 рдкрд░ set рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП --workers command line option рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рдХреБрдЫ examples рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрдм meaningful рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

рдПрдХ Simple App

рдпрджрд┐ рдЖрдкрдХреА application рдЗрддрдиреА simple рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ single server рдкрд░ run рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, cluster рдкрд░ рдирд╣реАрдВ, рддреЛ рдЖрдк container рдореЗрдВ process manager рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред

Docker Compose

рдЖрдк Docker Compose рдХреЗ рд╕рд╛рде single server (cluster рдирд╣реАрдВ) рдкрд░ deploy рдХрд░ рд░рд╣реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП shared network рдФрд░ load balancing preserve рдХрд░рддреЗ рд╣реБрдП containers рдХреА replication (Docker Compose рдХреЗ рд╕рд╛рде) manage рдХрд░рдиреЗ рдХрд╛ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдлрд┐рд░ рдЖрдк single container рд░рдЦрдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ process manager рдЕрдВрджрд░ рдХрдИ worker processes start рдХрд░реЗред


рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдРрд╕реА рдкрддреНрдерд░ рдкрд░ рд▓рд┐рдЦреА rules рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рдЖрдБрдЦ рдмрдВрдж рдХрд░рдХреЗ follow рдХрд░рдирд╛ рд╣реЛред рдЖрдк рдЗрди ideas рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ use case рдХрд╛ evaluate рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреЗ system рдХреЗ рд▓рд┐рдП best approach рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ check рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдЗрди concepts рдХреЛ рдХреИрд╕реЗ manage рдХрд░рдирд╛ рд╣реИ:

  • Security - HTTPS
  • startup рдкрд░ Running
  • Restarts
  • Replication (running processes рдХреА рд╕рдВрдЦреНрдпрд╛)
  • Memory
  • Start рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ previous steps

Memory

рдпрджрд┐ рдЖрдк рдкреНрд░рддрд┐ container single process run рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрди containers рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ (рдпрджрд┐ replicated рд╣реИрдВ рддреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ) рджреНрд╡рд╛рд░рд╛ consumed memory рдХреА quantity рдХрдореЛрдмреЗрд╢ well-defined, stable, рдФрд░ limited рд╣реЛрдЧреАред

рдФрд░ рдлрд┐рд░ рдЖрдк рдЕрдкрдиреЗ container management system (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Kubernetes рдореЗрдВ) рдХреА configurations рдореЗрдВ рд╡рд╣реА memory limits рдФрд░ requirements set рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рд╡рд╣ рдЙрди containers рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ memory рдХреА рдорд╛рддреНрд░рд╛, рдФрд░ cluster рдореЗрдВ machines рдореЗрдВ available рдорд╛рддреНрд░рд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП available machines рдореЗрдВ containers replicate рдХрд░ рдкрд╛рдПрдЧрд╛ред

рдпрджрд┐ рдЖрдкрдХреА application simple рд╣реИ, рддреЛ рдпрд╣ рд╢рд╛рдпрдж problem рдирд╣реАрдВ рд╣реЛрдЧреА, рдФрд░ рдЖрдкрдХреЛ hard memory limits specify рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреАред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдмрд╣реБрдд memory use рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП machine learning models рдХреЗ рд╕рд╛рде), рддреЛ рдЖрдкрдХреЛ check рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдк рдХрд┐рддрдиреА memory consume рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ machine рдкрд░ run рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ containers рдХреА рд╕рдВрдЦреНрдпрд╛ adjust рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП (рдФрд░ рд╢рд╛рдпрдж рдЕрдкрдиреЗ cluster рдореЗрдВ рдФрд░ machines add рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП)ред

рдпрджрд┐ рдЖрдк рдкреНрд░рддрд┐ container multiple processes run рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ start рдХрд┐рдП рдЧрдП processes рдХреА рд╕рдВрдЦреНрдпрд╛ available memory рд╕реЗ рдЕрдзрд┐рдХ memory consume рди рдХрд░реЗред

Start рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ Previous Steps рдФрд░ Containers

рдпрджрд┐ рдЖрдк containers (рдЬреИрд╕реЗ Docker, Kubernetes) рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рджреЛ рдореБрдЦреНрдп approaches рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Multiple Containers

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ multiple containers рд╣реИрдВ, рд╢рд╛рдпрдж рдкреНрд░рддреНрдпреЗрдХ single process run рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Kubernetes cluster рдореЗрдВ), рддреЛ рдЖрдк replicated worker containers run рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, single container рдореЗрдВ, single process рдЪрд▓рд╛рддреЗ рд╣реБрдП, previous steps рдХрд╛ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ separate container рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

/// note | рдиреЛрдЯ

рдпрджрд┐ рдЖрдк Kubernetes рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╢рд╛рдпрдж Init Container рд╣реЛрдЧрд╛ред

///

рдпрджрд┐ рдЖрдкрдХреЗ use case рдореЗрдВ рдЙрди previous steps рдХреЛ parallel рдореЗрдВ multiple times run рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ problem рдирд╣реАрдВ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдЖрдк database migrations рдирд╣реАрдВ рдЪрд▓рд╛ рд░рд╣реЗ, рдмрд▓реНрдХрд┐ рдмрд╕ check рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ database рдЕрднреА ready рд╣реИ рдпрд╛ рдирд╣реАрдВ), рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╣рд░ container рдореЗрдВ main process start рдХрд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рднреА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

Single Container

рдпрджрд┐ рдЖрдкрдХрд╛ setup simple рд╣реИ, рдЬрд┐рд╕рдореЗрдВ single container рд╣реИ рдЬреЛ рдлрд┐рд░ multiple worker processes start рдХрд░рддрд╛ рд╣реИ (рдпрд╛ рд╕рд┐рд░реНрдл рдПрдХ process), рддреЛ рдЖрдк app рдХреЗ рд╕рд╛рде process start рдХрд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ, рдЙрди previous steps рдХреЛ рдЙрд╕реА container рдореЗрдВ run рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Base Docker Image

рдПрдХ official FastAPI Docker image рд╣реБрдЖ рдХрд░рддреА рдереА: tiangolo/uvicorn-gunicorn-fastapiред рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ deprecated рд╣реИред тЫФя╕П

рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЗрд╕ base Docker image (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп similar one) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдЖрдк Kubernetes (рдпрд╛ рдЕрдиреНрдп) рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА cluster level рдкрд░, multiple containers рдХреЗ рд╕рд╛рде replication set рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдКрдкрд░ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ scratch рд╕реЗ image build рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ: FastAPI рдХреЗ рд▓рд┐рдП Docker Image рдмрдирд╛рдПрдБ.

рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ multiple workers рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдмрд╕ --workers command line option рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

/// note | Technical Details

Docker image рддрдм рдмрдирд╛рдИ рдЧрдИ рдереА рдЬрдм Uvicorn dead workers рдХреЛ manage рдФрд░ restart рдХрд░рдиреЗ рдХрд╛ support рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП Uvicorn рдХреЗ рд╕рд╛рде Gunicorn рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ required рдерд╛, рдЬрд┐рд╕рд╕реЗ рдХрд╛рдлреА complexity рдЬреБрдбрд╝рддреА рдереА, рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ Gunicorn Uvicorn worker processes рдХреЛ manage рдФрд░ restart рдХрд░ рд╕рдХреЗред

рд▓реЗрдХрд┐рди рдЕрдм рдЬрдм Uvicorn (рдФрд░ fastapi command) --workers use рдХрд░рдиреЗ рдХрд╛ support рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреА рдЦреБрдж рдХреА build рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп base Docker image рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ (рдпрд╣ рд▓рдЧрднрдЧ рдЙрддрдиреА рд╣реА code рдХреА рдорд╛рддреНрд░рд╛ рд╣реИ ЁЯШЕ).

///

Container Image Deploy рдХрд░реЗрдВ

Container (Docker) Image рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ deploy рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • Single server рдореЗрдВ Docker Compose рдХреЗ рд╕рд╛рде
  • Kubernetes cluster рдХреЗ рд╕рд╛рде
  • Docker Swarm Mode cluster рдХреЗ рд╕рд╛рде
  • Nomad рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп tool рдХреЗ рд╕рд╛рде
  • рдХрд┐рд╕реА cloud service рдХреЗ рд╕рд╛рде рдЬреЛ рдЖрдкрдХреА container image рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ deploy рдХрд░рддрд╛ рд╣реИ

uv рдХреЗ рд╕рд╛рде Docker Image

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ project рдХреЛ install рдФрд░ manage рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП uv рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдирдХреА uv Docker guide follow рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Recap

Container systems (рдЬреИрд╕реЗ Docker рдФрд░ Kubernetes рдХреЗ рд╕рд╛рде) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╕рднреА deployment concepts handle рдХрд░рдирд╛ рдХрд╛рдлреА straightforward рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

  • HTTPS
  • startup рдкрд░ Running
  • Restarts
  • Replication (running processes рдХреА рд╕рдВрдЦреНрдпрд╛)
  • Memory
  • Start рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ previous steps

рдЕрдзрд┐рдХрддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рд╢рд╛рдпрдж рдХреЛрдИ base image use рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп official Python Docker image рдкрд░ рдЖрдзрд╛рд░рд┐рдд scratch рд╕реЗ container image build рдХрд░реЗрдВрдЧреЗред

Dockerfile рдореЗрдВ instructions рдХреЗ order рдФрд░ Docker cache рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдХрд░ рдЖрдк build times minimize рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЖрдкрдХреА productivity maximize рд╣реЛ (рдФрд░ рдмреЛрд░рд┐рдпрдд рд╕реЗ рдмрдЪреЗрдВ)ред ЁЯШО