← Назад к вопросам

Что такое docker-compose.yml в Docker?

2.0 Middle🔥 161 комментариев
#Инфраструктура и DevOps

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое docker-compose.yml в Docker?

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

Основные цели и преимущества:

  1. Упрощение оркестрации: Позволяет определить несколько взаимосвязанных сервисов (например, веб-сервер, база данных, кэш) в одном файле.
  2. Воспроизводимость: Конфигурация хранится в коде, что обеспечивает идентичное окружение на всех этапах (разработка, тестирование, продакшн).
  3. Эффективное управление: Запуск, остановка и пересборка всего стека приложения выполняются минимальным набором команд.

Структура файла docker-compose.yml

Файл состоит из нескольких основных разделов. Вот пример для типичного веб-приложения с PHP и MySQL:

version: '3.8'  # Версия схемы Compose (рекомендуется 3.x+)

services:
  web:
    image: php:8.2-apache  # Используем официальный образ PHP с Apache
    container_name: my_php_app
    ports:
      - "8080:80"  # Пробрасываем порт 80 контейнера на порт 8080 хоста
    volumes:
      - ./src:/var/www/html  # Монтируем локальную папку с кодом
    environment:
      - DB_HOST=database
      - DB_USER=root
    depends_on:
      - database  # Указываем зависимость от сервиса database

  database:
    image: mysql:8.0
    container_name: mysql_db
    environment:
      MYSQL_ROOT_PASSWORD: secret_password
      MYSQL_DATABASE: app_db
    volumes:
      - db_data:/var/lib/mysql  # Используем именованный том для сохранения данных

volumes:
  db_data:  # Определяем именованный том для хранения данных БД

Ключевые директивы в файле:

  • services: Основной раздел, где описываются контейнеры (сервисы). Каждый сервис имеет уникальное имя (например, web, database).
  • image: Указывает Docker-образ для создания контейнера. Может быть из реестра (Docker Hub) или локально собранным.
  • build: Альтернатива image, если нужно собрать образ из Dockerfile в текущем проекте.
  • ports: Пробрасывает порты контейнера на хост (формат "хост:контейнер").
  • volumes: Определяет тома для сохранения данных или монтирования файлов.
  • environment: Устанавливает переменные окружения внутри контейнера.
  • depends_on: Задаёт порядок запуска сервисов, указывая зависимости.
  • networks: Позволяет подключить сервисы к пользовательским сетям Docker для изоляции.

Работа с Docker Compose

Для управления приложением используются команды CLI:

  • docker-compose up — запуск всех сервисов (флаг -d для фонового режима).
  • docker-compose down — остановка и удаление контейнеров, сетей.
  • docker-compose ps — просмотр состояния сервисов.
  • docker-compose logs — вывод логов.

Практическое применение в PHP-разработке

Для backend-приложений на PHP docker-compose.yml часто включает:

  1. Сервис PHP-FPM с Nginx/Apache.
  2. Базу данных (MySQL, PostgreSQL).
  3. Кэширование (Redis, Memcached).
  4. Очереди задач (RabbitMQ, Beanstalkd).
  5. Инструменты мониторинга (phpMyAdmin, Adminer).

Пример для современного стека:

services:
  php:
    build: ./docker/php  # Сборка из Dockerfile
    volumes:
      - .:/var/www

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    depends_on:
      - php

  mysql:
    image: mariadb:10.5
    environment:
      MYSQL_ROOT_PASSWORD: rootpass

  redis:
    image: redis:7-alpine

Важные аспекты:

  • Версии схемы: Рекомендуется использовать версию 3.x+, так как она поддерживает новые функции Docker (например, swarm-режим).
  • Безопасность: Не храните чувствительные данные (пароли, ключи) прямо в файле. Используйте .env-файлы или секреты Docker.
  • Масштабирование: Compose подходит для разработки и тестирования, но для продакшн-сред часто требуются более сложные оркестраторы (Kubernetes, Docker Swarm).

В итоге, docker-compose.yml — это «инфраструктура как код» для Docker, которая стандартизирует развёртывание приложений, сокращает время настройки окружения и минимизирует ошибки, связанные с различиями в средах. Для PHP-разработчика это незаменимый инструмент, позволяющий быстро поднимать комплексные стеки (LAMP/LEMP) и обеспечивать консистентность между командой.