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 вы хорошо подготовлены к созданию и развертыванию высокопроизводительных веб-приложений.