﻿---
title: Docker Compose для локальной разработки
description: "Практики описания локального приложения и зависимостей в Docker Compose: синхронизация кода, данные, конфигурация и безопасность."
---

## Роль Docker Compose

Docker Compose позволяет описать приложение и его зависимости в YAML-конфигурации и запускать их совместно. Для локальной разработки это может быть веб-приложение, база данных, кэш и вспомогательные процессы. Конфигурация становится частью репозитория, поэтому команда видит состав окружения и может воспроизвести его на другой машине.

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

## Рабочий цикл с кодом

Для правок есть bind mounts и Compose Watch. Bind mount напрямую связывает каталог хоста с контейнером и удобен для простой разработки, но поведение и скорость файловой системы могут различаться между ОС. Compose Watch позволяет задать точечные правила синхронизации, перезапуска или пересборки. Например, исходный код можно синхронизировать, а пересборку запускать при изменении файла зависимостей.

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

## Данные и конфигурация

Для базы данных используйте именованный том, если данные должны сохраняться после пересоздания контейнера. Для временного теста можно использовать одноразовый том или сбрасываемый набор данных. Подготовьте миграции и seed-данные, чтобы новый разработчик мог получить рабочую базу без копирования production.

Разделяйте конфигурацию приложения и секреты. `.env` помогает задавать локальные значения, но его нужно исключить из Git, если там есть реальные ключи. Compose поддерживает secrets, которые подключаются только к явно указанным сервисам как файлы. Не считайте локальный Compose secret полноценным хранилищем секретов для production: способы выдачи и защиты секретов там зависят от платформы.

## Качество и безопасность

- Закрепляйте конкретные версии образов; обновляйте их осознанно и проверяйте совместимость.
- Добавляйте healthcheck для сервисов, от готовности которых зависит приложение. Сам факт запуска контейнера не означает, что база уже принимает соединения.
- Не публикуйте сервисные порты на внешний интерфейс хоста без необходимости.
- Используйте непривилегированного пользователя в прикладном контейнере и выдавайте только необходимые тома и права.
- Проверяйте Compose-конфигурацию перед запуском, особенно если она взята из незнакомого репозитория: bind mounts и параметры контейнера могут предоставить доступ к файлам хоста.
- Убедитесь, что приложение корректно сообщает об ошибках соединения и повторяет попытку подключения, когда зависимости готовы позже.

## Когда выбрать Compose

Compose удобен, если стек включает несколько сервисов, команда хочет видеть конфигурацию в репозитории и готова поддерживать Dockerfile, тома и правила разработки. Специализированная среда может быть проще для типовых PHP-проектов, где важны автоматические домены, версии PHP и готовые сервисы. Сравните [Lerd](https://wpcraft.ru/kb/stacks/local-development/lerd.md) и общий [обзор локальной разработки](https://wpcraft.ru/kb/stacks/local-development.md), прежде чем закреплять подход для команды.

Для конкретной конфигурации WordPress на Docker Compose см. [Docker для WordPress](https://wpcraft.ru/kb/infrastructure/devops/docker-wordpress.md). Возможности и ограничения самой платформы описаны в профиле [Docker](https://wpcraft.ru/kb/infrastructure/tools/docker.md).

## Материалы и источники

- [Docker Compose Watch](https://docs.docker.com/compose/how-tos/file-watch/)
- [Docker Compose secrets](https://docs.docker.com/compose/how-tos/use-secrets/)
- [Best practices for environment variables](https://docs.docker.com/compose/how-tos/environment-variables/best-practices/)
- [Compose trust model](https://docs.docker.com/compose/trust-model/)
- [Compose Develop Specification](https://docs.docker.com/reference/compose-file/develop/)