Перейти к содержимому
Главная страница » FastAPI в Docker

FastAPI в Docker

Docker предлагает способ запуска приложений в согласованной среде, что упрощает развертывание и масштабирование. FastAPI — это современный, быстрый веб-фреймворк для создания API с использованием Python на основе стандартных подсказок по типу Python. В этой статье мы расскажем вам о процессе настройки приложения FastAPI.

Предварительные требования

  • Базовое понимание Python и FastAPI.
  • На вашем компьютере установлен Docker.

Запуск FastAPI в Docker по шагам

1. Создайте приложение FastAPI

Прежде чем мы приступим к процессу настройки, давайте создадим базовое приложение FastAPI. Если у вас есть существующее приложение, пропустите этот шаг. Вот простой `main.py`:

from fastapi import FastAPI

app = FastAPI()

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

2. Настройка requirements.txt

Рекомендуется перечислять все ваши зависимости от Python в requirements.txt файле. В этом примере у вас будет (файл должен быть расположен в папке с проектом):

fastapi
uvicorn

3. Создайте файл Dockerfile

# Use an official Python runtime as a parent image
FROM python:3.9-slim

# Set environment varibles
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Set the working directory in docker
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Specify the command to run on container start
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

В Dockerfile содержатся инструкции для Docker о том, как создать образ нашего приложения. Создайте Dockerfile в корневом каталоге вашего приложения со следующим содержимым:

В этом файле Dockerfile:

  • Мы используем облегченный образ Python 3.9.
  • Мы устанавливаем некоторые переменные окружения, чтобы оптимизировать Python для работы в контейнере Docker.
  • Мы устанавливаем рабочий каталог внутри контейнера в `/app`.
  • Мы копируем содержимое нашего текущего каталога в контейнер.
  • Мы устанавливаем зависимости Python.
  • Наконец, мы говорим Docker запускать `uvicorn` с нашим приложением при запуске контейнера.

4. Создайте файл .dockerignore

Точно так же, как мы можем игнорировать файлы с помощью .gitignore, мы можем сделать то же самое с помощью .dockerignore. Это гарантирует, что определенные файлы и каталоги не будут скопированы в контейнер. Вот базовый файл .dockerignore:

__pycache__
*.pyc
*.pyo
*.egg-info

5. Создайте образ Docker

Теперь, когда у нас есть наш Dockerfile настроен, мы можем создать образ для нашего приложения:

docker build -t fastapi_app . 

Это создаст образ Docker с именем fastapi_app из нашего текущего каталога.

6. Запустите контейнер Docker

Теперь, когда у нас есть наш образ, мы можем запустить его:

docker run -p 8000:80 fastapi_app 

Эта команда сообщает Docker запустить наш образ и сопоставить порт 8000 на нашем хост-компьютере с портом 80 в контейнере.

После запуска контейнера вы можете перейти на страницу `http://localhost:8000` и увидеть приложение FastAPI в действии.

Настройка FastAPI с помощью Docker-compose

Docker-compose — это инструмент для определения и запуска многоконтейнерных приложений Docker. Для FastAPI и многих других приложений он особенно полезен, когда вам нужно связать свое приложение со службами, такими как базы данных, системы кэширования и т.д. Для простоты мы продемонстрируем настройку docker-compose только для приложения FastAPI, но вы можете распространить это действие и на другие сервисы.

1. Установите Docker-compose

Перед началом работы убедитесь, что у вас установлен Docker-compose.

2. Создайте файл docker-compose.yml

В корневом каталоге вашего приложения FastAPI создайте файл с именем docker-compose.yml и заполните его следующим:

version: '3.8'

services:
  web:
    build: .
    command: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80", "--reload"]
    ports:
      - "8000:80"
    volumes:
      - .:/app
    environment:
      - PYTHONUNBUFFERED=1

В этой конфигурации:

  • версия: указывает версию формата файла Docker-compose.
  • сервисы: определяет службы для запуска.
  • веб: название нашего сервиса FastAPI.
  • build: указывает каталог, в котором находится Dockerfile (в данном случае текущий каталог).
  • команда: это переопределяет CMD, установленный в файле Dockerfile.
  • порты: сопоставляет порт 8000 на хосте с портом 80 в контейнере.
  • тома: Синхронизирует текущий каталог (ваш код FastAPI) с /app внутри контейнера.
  • окружение: устанавливает переменные окружения для контейнера. Мы устанавливаем PYTHONUNBUFFERED = 1 только для этого примера.

3. Запустите службы Docker-compose

Установив файл docker-compose.yml, перейдите в корневой каталог вашего приложения FastAPI и запустите:

docker-compose up

Эта команда сообщает Docker-compose запустить службы, определенные в `docker-compose.yml`. В нашем примере она создает и запускает приложение FastAPI.

Теперь, если вы перейдете на страницу http://localhost:8000, вы увидите, что ваше приложение FastAPI запущено.

4. Остановка служб

Чтобы остановить службы, запущенные Docker-compose, просто нажмите Ctrl + C в терминале, где запущен docker-compose up. Чтобы остановить и удалить все контейнеры, определенные в docker-compose.yml, вы можете запустить:

docker-compose down 

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *