7.6 Docker Compose на примере FastAPI, PostgreSQL
0 из 6 шагов пройдено
0 из 14 баллов  получено

Теперь, когда вы знаете о том, для чего мы собираемся использовать Docker Compose, пришло время создать ваше первое клиент-серверное приложение с использованием этого инструмента.

В этом разделе разберемся с тем, что такое Docker Compose и как он работает на реальном небольшом проекте — положим Django и PostgreSQL в контейнеры, так чтобы они работали как одно целое. Для сборки кластера контейнеров используется docker-compose.yml.

Docker-compose.yml — конфигурационный файл в YAML-формате, описывающий логику запуска и взаимодействия контейнеров между собой и внешним миром. В сущности инструкции заложенные в docker-compose.yml по логике работы идентичны ключам команды docker run.


Для запуска контейнеров через docker-compose используются следующие команды:

  • docker-compose build: собрать проект
  • docker-compose up -d: запустить проект
  • docker-compose down: остановить проект
  • docker-compose logs -f [service name]: посмотреть логи сервиса
  • docker-compose ps: вывести список контейнеров
  • docker-compose exec [service name] [command]: выполнить команду в контейнере
  • docker-compose images: вывести список образов


Подготовка проекта к Docker Compose

За основу возьмем проект интернет магазина из 5 модуля данного курса. На данный момент, его файловая структура выглядит следующим образом:

Выполним команду:

pip freeze -> requirements.txt

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

И теперь создадим Dockerfile в папке app нашего приложения.

FROM python:3.12.0

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN pip install --upgrade pip
COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . /app/

Я думаю вы заметили, что теперь нам не нужно добавлять в него команды, которые открывают доступ к порту и выполняют команды запуска.

Затем добавьте файл docker-compose.yml в корень проекта:

services:
  web:
    # Берем Dockerfile из каталога app
    build: app
    # Запускаем тестовый сервер
    command: uvicorn app.main:app --host 0.0.0.0
    # куда будут помещены данные из каталога app
    volumes:
      - .:/app
    # Открываем порт 8000 внутри и снаружи
    ports:
      - 8000:8000

Обратите внимание на значение version. Если вы используете старую версию Docker - вам может потребоваться ее изменить.

В итоге мы получаем следующую файловую структуру:

Внутри папки app находится наш FastAPI проект, его Dockerfile и requirements.txt.


Перед выполнением следующих шагов проверьте в Docker Desktop запущенные контейнеры, их необходимо остановить. Теперь попробуем создать наш образ Docker Compose:

docker-compose build


После создания образа запустите контейнер:

docker-compose up -d

Опция -d или --detach используется для создания и запуска контейнеров в фоновом режиме.


Перейдите на http://127.0.0.1:8000, чтобы убедиться что наш FastApi проект работает:


Теперь мы можем открыть Docker Desktop и посмотреть на наши контейнеры:


В следующем шаге мы добавим сервис PostgreSQL к нашему проекту.


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