Развертывание 1С в контейнерах Docker становится все более популярным решением среди системных администраторов и DevOps-инженеров. Это обусловлено потребностью в автоматизации тестирования, желанием изолировать различные версии платформы и ускорить процесс развертывания окружений для разработки. В данной статье мы подробно разберем, как подойти к этой задаче, с какими трудностями придется столкнуться и как их эффективно преодолеть.
Прежде чем приступать к технической реализации, давайте выясним, для чего это может быть полезно. Рассмотрим основные сценарии, в которых Docker дает ощутимые преимущества:
docker-compose.yaml файл, с помощью которого новый сотрудник развернет всю инфраструктуру (1С + СУБД + веб-сервер) одной командой, не тратя время на ручную настройку.Разберем самый острый вопрос: программные лицензии 1С крайне чувствительны к изменению параметров «железа». В Docker идентификаторы контейнера (такие как MAC-адрес или UUID системы) могут меняться при каждом перезапуске, что приводит к «слету» лицензий. Рассмотрим варианты решения этой проблемы:
Вариант 1: Использование сервера лицензирования. Выясним наиболее стабильный промышленный метод. Мы можем вынести службу лицензирования на отдельный физический сервер или стабильную виртуальную машину вне Docker. Контейнеры с сервером 1С будут обращаться к этому серверу по сети за получением ключей. Для настройки среды разработчика пригодятся рецепты по установке комьюнити-лицензии на сервер 1С без графического интерфейса.
Вариант 2: Фиксация MAC-адреса. В конфигурационном файле docker-compose мы можем жестко закрепить MAC-адрес за конкретным контейнером. Посмотрим на пример настройки сетевого интерфейса:
services:
1c-server:
image: my-1c-image:8.3.22
networks:
1c-net:
ipv4_address: 172.16.0.10
mac_address: 02:42:ac:11:00:0a
Вариант 3: Проброс USB-ключей. Если вы используете аппаратную защиту, необходимо пробросить USB-устройство внутрь контейнера. Это делается с помощью параметра --device при запуске контейнера, однако стоит помнить, что при обновлении ядра хостовой системы настройки могут потребовать корректировки.
Сервер 1С использует специфический набор портов, который необходимо правильно прокинуть наружу. Проанализируем стандартную схему: основной порт агента — 1540, порт менеджера кластера — 1541, и диапазон рабочих процессов — 1560-1591.
Рассмотрим два подхода к настройке сети:
network_mode: host позволяет контейнеру использовать сетевой стек хоста напрямую. Это упрощает настройку, так как не нужно пробрасывать каждый порт отдельно, и снимает проблемы с именами серверов (DNS), но снижает уровень изоляции контейнера.hostname контейнера внутри сети Docker совпадает с именем, по которому к нему будут обращаться клиенты, иначе кластер 1С не сможет корректно перенаправлять запросы.Выясним важный нюанс: стандартный образ PostgreSQL из Docker Hub не подходит для работы с 1С. Фирма «1С» вносит в СУБД специфические патчи для корректной работы с блокировками и кодировками.
Проанализируем шаги по подготовке базы:
Postgres Pro) или соберите собственный образ на базе дистрибутива Linux, наложив патчи от 1С вручную. При работе с отечественными ОС важно учитывать особенности настройки Astra Linux для корректной установки всех зависимостей.volumes (тома) для монтирования папки с данными БД на физический диск хоста.Рассмотрим пример секции для базы данных в docker-compose.yaml:
db:
image: postgres:14-1c
environment:
POSTGRES_PASSWORD: mysecretpassword
volumes:
- /var/lib/1c/db-data:/var/lib/postgresql/data
restart: always
Подводя итог нашему исследованию, выделим сильные и слабые стороны использования Docker в экосистеме 1С.
Плюсы:
Apache или Nginx внутри контейнеров позволяет легко масштабировать доступ для пользователей.Минусы:
Dockerfile.Таким образом, мы видим, что Docker для 1С — это мощный инструмент в руках опытного администратора, особенно полезный в процессах разработки и тестирования. Однако для эксплуатации высоконагруженных «продакшн»-систем следует подходить к нему с осторожностью, уделяя особое внимание вопросам отказоустойчивости и лицензирования.