🐳 Как обещал, в этот раз будем собирать образ с сервером 1С.
Почему нельзя взять готовый образ, как для nginx? Потому, что nginx распространяется свободно, а платформа 1С - нет. Образы с платформой 1С нельзя публиковать в общем доступе. Кстати, может кто-то и пушит образы в публичные репозитории, но он явно делает это не подумавши.
Правильное решение такое: взять свой логин и пароль от ИТС, клонировать себе проект https://github.com/firstBitMarksistskaya/onec-docker и собрать образ самостоятельно.
Я подготовил детальные инструкции по сборке в своем репозитории, см. тут: https://github.com/cloudnative-1c/1c-k8s-lab/tree/main/labs/02-1c-docker-image.
Кстати, во время подготовки этого поста мне пришлось доработать скрипты в проекте https://github.com/firstBitMarksistskaya/onec-docker, чтобы образы можно было собирать локально, без Docker Registry.
После выполнения инструкций у вас получится образ с сервером 1С.
Предлагаю его немножко препарировать. Полезно знать, с чем имеешь дело.
Сразу иду в самый конец server/Dockerfile и вижу это:
# Настройка точки входа и экспонирование портов
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
EXPOSE 1540 1541 1545 1560
CMD ["ragent"]
Что интересно в этом фрагменте:
🔘 ENTRYPOINT устанавливается из файла http://docker-entrypoint.sh/, его рассмотрим далее
🔘 в EXPOSE не перечислены все порты рабочих процессов из стандартного диапазона, но это нужно больше для красоты
🔘 в CMD ["ragent"] означает, что в скрипт http://docker-entrypoint.sh/ будет передан параметр "ragent"
Ок, что интересного внутри docker-entrypoint.sh?
🔘 по умолчанию скрипт запускает процессы ragent и ras
🔘 ragent запускается через exec, то есть он станет PID 1. А это значит, что контейнер скорее всего будет корректно обрабатывать сигналы типа SIGTERM. Это очень правильный подход, это мы одобряем.
🔘 ragent и ras запускаются через gosu от имени usr1cv8, что тоже является хорошей морской практикой
🔘 все стандартные параметры запуска ragent и ras устанавливаются по умолчанию, но могут быть переопределены
🔘 в CMD можно вместо параметра "ragent" передать свою команду
Что еще в этом образе:
🔘 сборка состоит из нескольких этапов и финальный образ построен на минималистичном debian:bookworm-slim
🔘 добавлен симлинк /opt/1cv8/current, что *капец* как удобно
В общем, образ мне нравится, огромное спасибо автору -
https://t.me/DevOps_onec и всем, кто приложил руку к onec-docker. Да и мне самому тоже, чего уж там 😅
Единственное, что немного смущает: в таком контейнере не соблюдается принцип https://docs.docker.com/engine/containers/multi-service_container/, потому что помимо сервера 1С в нем будет работать и ras, который в общем случае можно запустить отдельно. Но этот принцип - это тоже не догма и пока что это все вообще не принципиально. Сейчас игнорируем, но на будущее запомним.
Образ есть, в следующий раз засунем его в... (гусары, молчать!) kind и запустим 😁
PS: параллельно занимаюсь полировкой нового релиза gitsync, версия 3.7.0 уже почти готова.