==== 2.2 Создайте файл docker-compose.yml ==== * Создаем и открываем файл для редактирования nano docker-compose.yml * Или используйте любой другой редактор: vim, code, etc. # Определение всех сервисов (контейнеров) в системе services: # ============================================================ # Бэкенд-приложение - обрабатывает HTTP запросы и показывает заголовки # ============================================================ app: build: . # Собираем образ из Dockerfile в текущей директории container_name: backend-app # Фиксированное имя для удобства networks: - test-net # Подключаем к внутренней сети # Приложение слушает порт 8000 внутри контейнера # Не публикуем порт наружу - доступ только через nginx # ============================================================ # NGINX 1 - Первый обратный прокси (публичная точка входа) # ============================================================ nginx1: image: nginx:alpine # Легковесный образ NGINX на Alpine Linux container_name: nginx1 ports: - "8081:80" # Публикуем порт 8081 хоста на порт 80 контейнера volumes: # Монтируем конфигурацию (только для чтения, безопасность) - ./nginx/nginx1.conf:/etc/nginx/conf.d/default.conf:ro networks: - test-net depends_on: - app # Ждём запуска приложения - nginx2 # Ждём запуска других nginx для маршрутизации - nginx3 # ============================================================ # NGINX 2 - Второй обратный прокси (внутренний) # ============================================================ nginx2: image: nginx:alpine container_name: nginx2 # Не публикуем порты наружу - работает только внутри сети volumes: - ./nginx/nginx2.conf:/etc/nginx/conf.d/default.conf:ro networks: - test-net depends_on: - app - nginx3 # ============================================================ # NGINX 3 - Третий обратный прокси (внутренний) # ============================================================ nginx3: image: nginx:alpine container_name: nginx3 volumes: - ./nginx/nginx3.conf:/etc/nginx/conf.d/default.conf:ro networks: - test-net depends_on: - app # ============================================================ # Сетевая конфигурация # ============================================================ networks: test-net: driver: bridge # Стандартный драйвер сети Docker # Все контейнеры видят друг друга по именам сервисов # Например: nginx1 может обращаться к app, nginx2 и т.д.