Почему нельзя взять готовый образ, как для nginx? Потому, что nginx распространяется свободно, а платформа 1С - нет. Образы с платформой 1С нельзя публиковать в общем доступе. Кстати, может кто-то и пушит образы в публичные репозитории, но он явно делает это не подумавши.
Правильное решение такое: взять свой логин и пароль от ИТС, клонировать себе проект onec-docker и собрать образ самостоятельно.
Я подготовил детальные инструкции по сборке в своем репозитории, см. тут: 02-1c-docker-image.
Кстати, во время подготовки этого поста мне пришлось доработать скрипты в проекте onec-docker, чтобы образы можно было собирать локально, без Docker Registry.
После выполнения инструкций у вас получится образ с сервером 1С.
Предлагаю его немножко препарировать. Полезно знать, с чем имеешь дело.
Сразу иду в самый конец
server/Dockerfile и вижу это:# Настройка точки входа и экспонирование портов
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
EXPOSE 1540 1541 1545 1560
CMD ["ragent"]
Что интересно в этом фрагменте:
🔘 ENTRYPOINT устанавливается из файла docker-entrypoint.sh, его рассмотрим далее
🔘 в EXPOSE не перечислены все порты рабочих процессов из стандартного диапазона, но это нужно больше для красоты
🔘 в CMD ["ragent"] означает, что в скрипт 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, что *капец* как удобноВ общем, образ мне нравится, огромное спасибо автору - Егору Иванову и всем, кто приложил руку к
onec-docker. Да и мне самому тоже, чего уж там 😅Единственное, что немного смущает: в таком контейнере не соблюдается принцип one service per container, потому что помимо сервера 1С в нем будет работать и ras, который в общем случае можно запустить отдельно. Но этот принцип - это тоже не догма и пока что это все вообще не принципиально. Сейчас игнорируем, но на будущее запомним.
Образ есть, в следующий раз засунем его в... (гусары, молчать!) kind и запустим 😁
PS: параллельно занимаюсь полировкой нового релиза gitsync, версия 3.7.0 уже почти готова.