Docker решает классическую проблему "у меня работает, а на сервере нет" — окружение разработки становится точной копией того, что реально используется на проде, а не приблизительным аналогом. Разберём, как настроить Docker-окружение для разработки на 1С-Битрикс.
Базовый набор контейнеров
# docker-compose.yml
services:
web:
image: php:8.2-fpm
volumes:
- ./:/var/www/html
depends_on:
- db
nginx:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./:/var/www/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- web
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: bitrix
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
Минимальный набор из трёх сервисов — PHP-FPM, nginx и MySQL — закрывает базовые потребности разработки. Версии образов стоит подбирать максимально близкими к боевому серверу, ради которого и затевается использование Docker, — расхождение версий PHP между окружением разработки и продом сводит на нет главное преимущество контейнеризации.
Установка необходимых PHP-расширений
# Dockerfile для сервиса web
FROM php:8.2-fpm
RUN docker-php-ext-install pdo_mysql gd mbstring
RUN pecl install xdebug && docker-php-ext-enable xdebug
Стандартный образ PHP не включает все расширения, требуемые Битриксом, — их нужно явно установить через собственный Dockerfile, собранный на основе базового образа, сверяясь со списком требуемых расширений в документации системы.
Нужна помощь с Битрикс?
Подключение Xdebug внутри контейнера
# php.ini внутри контейнера
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
Для отладки с точками останова из IDE на хост-машине контейнер
должен знать, куда стучаться, — специальное имя
host.docker.internal позволяет контейнеру обращаться
к хост-машине, где запущена IDE с прослушивающим отладчиком, что
без Docker обычно решается проще через 127.0.0.1.
Монтирование файлов и производительность на macOS/Windows
Прямое монтирование файловой системы хоста внутрь контейнера на macOS и Windows (в отличие от Linux) исторически создаёт заметное падение скорости файловых операций из-за особенностей виртуализации файловой системы — для проектов с большим числом файлов (а Битрикс именно такой) это может ощутимо замедлять загрузку страниц в разработческом окружении. Использование именованных Docker-томов вместо прямого монтирования каталога, либо настройка кешированного режима монтирования, снижает эту проблему.
Импорт базы данных при первом запуске
docker exec -i project_db_1 mysql -u root -proot bitrix < dump.sql
Первичное наполнение контейнера базы данных дампом с боевого сервера (после переноса на локальное окружение, как разобрано отдельно) выполняется через выполнение команды импорта внутри запущенного контейнера, а не через прямое обращение к файлу базы на диске, которое обходило бы сам процесс MySQL внутри контейнера.
Готовые образы под Битрикс от сообщества
Помимо сборки образов с нуля, существуют готовые Docker-образы, уже настроенные под требования 1С-Битрикс сообществом разработчиков, — они экономят время на первоначальной настройке, но стоит проверить их актуальность и происхождение перед использованием в проекте, особенно для боевых сценариев, а не только локальной разработки.
Частые ошибки
- Версии образов заметно расходятся с боевым сервером. Теряется главное преимущество Docker — идентичность окружений.
- Не установлены обязательные PHP-расширения Битрикса. Проявляется не сразу, а на конкретной функциональности, использующей отсутствующее расширение.
- Прямое монтирование каталога на macOS/Windows без учёта производительности. Заметное замедление файловых операций по сравнению с нативным Linux-окружением.
Итог
Docker-окружение для разработки на 1С-Битрикс строится вокруг трёх базовых сервисов — PHP-FPM, nginx и MySQL — с версиями, максимально близкими к боевому серверу, и собственным Dockerfile для установки требуемых PHP-расширений. Отдельного внимания требуют настройка Xdebug для отладки из контейнера и производительность файловых операций на macOS и Windows, где прямое монтирование каталога хоста работает медленнее, чем на нативном Linux.
