Docker предлагает способ запуска приложений в согласованной среде, что упрощает развертывание и масштабирование. FastAPI — это современный, быстрый веб-фреймворк для создания API с использованием Python на основе стандартных подсказок по типу Python. В этой статье мы расскажем вам о процессе настройки приложения FastAPI.
Предварительные требования
- Базовое понимание Python и FastAPI.
- На вашем компьютере установлен Docker.
Запуск FastAPI в Docker по шагам
1. Создайте приложение FastAPI
Прежде чем мы приступим к процессу настройки, давайте создадим базовое приложение FastAPI. Если у вас есть существующее приложение, пропустите этот шаг. Вот простой main.py
:
1 2 3 4 5 6 7 |
from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} |
2. Настройка requirements.txt
Рекомендуется перечислять все ваши зависимости от Python в requirements.txt файле. В этом примере у вас будет:
1 2 3 4 |
fastapi uvicorn requirements.txt |
3. Создайте файл Dockerfile
В Dockerfile
содержатся инструкции для Docker о том, как создать образ нашего приложения. Создайте Dockerfile
в корневом каталоге вашего приложения со следующим содержимым:Реклама
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 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:
- Мы используем облегченный образ Python 3.9.
- Мы устанавливаем некоторые переменные окружения, чтобы оптимизировать Python для работы в контейнере Docker.
- Мы устанавливаем рабочий каталог внутри контейнера в
/app
. - Мы копируем содержимое нашего текущего каталога в контейнер.
- Мы устанавливаем зависимости Python.
- Наконец, мы говорим Docker запускать
uvicorn
с нашим приложением при запуске контейнера.
4. Создайте файл .dockerignore
Точно так же, как мы можем игнорировать файлы с помощью .gitignore, мы можем сделать то же самое с помощью .dockerignore. Это гарантирует, что определенные файлы и каталоги не будут скопированы в контейнер. Вот базовый .dockerignore:
1 2 3 4 |
__pycache__ *.pyc *.pyo *.egg-info |
5. Создайте образ Docker
Теперь, когда у нас есть наш Dockerfile настроен, мы можем создать образ для нашего приложения:
1 |
docker build -t fastapi_app . |
Это создаст образ Docker с именем fastapi_app из нашего текущего каталога.
6. Запустите контейнер Docker
Теперь, когда у нас есть наш образ, мы можем запустить его:Реклама
1 |
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
и заполните его следующим:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 и запустите:
1 |
docker-compose up |
Эта команда сообщает Docker-compose запустить службы, определенные в docker-compose.yml
. В нашем примере она создает и запускает приложение FastAPI.
Теперь, если вы перейдете на страницу http://localhost:8000, вы увидите, что ваше приложение FastAPI запущено.
4. Остановка служб
Чтобы остановить службы, запущенные Docker-compose, просто нажмите Ctrl + C в терминале, где запущен docker-compose up. Чтобы остановить и удалить все контейнеры, определенные в docker-compose.yml, вы можете запустить:
1 |
docker-compose down |
Следуя описанным выше шагам, вы успешно настроили приложение FastAPI. Настройка ваших приложений дает ряд преимуществ, включая согласованную среду, более легкое масштабирование и упрощенное развертывание. Благодаря скорости FastAPI и удобству Docker вы хорошо подготовлены к созданию и развертыванию высокопроизводительных веб-приложений.