7.4 Контейнеризация FastAPI и написание Dockerfile
0 из 2 шагов пройдено

За основу возьмем простой проект по типу "Hello word". Для этого создадим файл main.py следующего содержания:

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def welcome() -> dict:
    return {"message": "Hello World"}

И следующим шагом выполним команду:

pip freeze -> requirements.txt

Чтобы создать файл, содержащий все зависимости нашего проекта.

 

Создание Dockerfile

Начнем с Dockerfile - это текстовый файл, который содержит инструкции о том, как будет создан docker-образ.


В Dockerfile используются нижеследующие директивы:

  • FROM: Директива устанавливает базовый образ, из которого будет построен контейнер Docker.
  • WORKDIR: Директива устанавливает рабочий каталог в созданном образе.
  • RUN: Директива выполняет команды в контейнере.
  • COPY: Директива копирует файлы из файловой системы в контейнер.
  • CMD: Директива устанавливает исполняемые команды в контейнере.


В корневом каталоге проекта создайте файл с именем Dockerfile без расширения файла:


Добавим в этот файл следующие команды:

# pull the official base image
FROM python:3.12.0-alpine

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app
RUN pip install -r requirements.txt

# copy project
COPY . /usr/src/app

EXPOSE 8000

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]


Разберем содержимое этого файла подробнее:

  • FROM python:3.12.0-alpine: Устанавливает базовый образ, из которого будет создан контейнер Docker.
  • WORKDIR /usr/src/app: Устанавливает рабочий каталог внутри контейнера в/usr/src/app.
  • ENV PYTHONDONTWRITEBYTECODE 1: Не позволяет Python копировать файлы .pyc в контейнер.
  • ENV PYTHONUNBUFFERED 1: Гарантирует, что вывод Python регистрируется в терминале, что позволяет отслеживать логи FastAPI в режиме реального времени.
  • RUN pip install --upgrade pip: Устанавливает и обновляет версию pip, которая находится в контейнере.
  • COPY ./requirements.txt /usr/src/app: Копирует requirements.txt файл в рабочий каталог в контейнере.
  • RUN pip install -r requirements.txt: Устанавливает все необходимые модули проекта для запуска в контейнере.
  • COPY . /usr/src/app: Копирует весь исходный код проекта в рабочий каталог в контейнере.
  • EXPOSE 8000: Предоставляет порт 8000 для доступа из других приложений.
  • CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]: Устанавливает исполняемые команды в контейнере.

 

Создание образа Docker

Чтобы создать образ Docker из файла Dockerfile, который мы создали выше, выполните следующую команду:

docker build --tag fastapi_hello_word:latest .
  • --tag Устанавливает тег для образа. Например, мы создаем образ Docker из python:3.12.0 у него есть тег alpine.
    В нашем образе Docker, latest это тег.
  • Точка . указывает на то, что Dockerfile находится в текущем рабочем каталоге.


Результат выполнения данной команды:


Чтобы перечислить все доступные образы на вашем компьютере, выполните следующую команду:

docker image ls


Также мы можем посмотреть наши образы используя Docker Desktop, перейдя в раздел Images:


Из приведенного выше списка мы видим созданный нами образ fastapi_hello_word.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Нет обсуждений. Начните первое.