В папку distr разместить файлы дистрибутивов (DEB) для 1С и СУБД. Например:
- deb64_8_3_18_1661.tar.gz
- postgresql_12.7_5.1C_amd64_deb.tar.bz2
Или использовать режим для прямого скачивания дистрибутивов с releases.1c.ru. Для этого в команде
docker build
указать параметры--build-arg AUTO_DOWNLOAD_DISTR=1
и--build-arg CRED=./distr/credentials
. Где ./distr/credentials путь к файлу с логином и паролем к порталу 1С. Шаблон файла можно взять отсюда: distr/credentials.template
Если в сборку требуется включить Web-сервер, то в команде docker build
необходимо добавть параметр --build-arg INSTALL_APACHE=1
.
В обязательном порядке для docker build
указываются параметры:
--build-arg SRV1C_VERSION=8.3.19.1417
, где вместо 8.3.19.1417 версия 1С (в формате: 4 разряда разделенных точками)--build-arg POSTGRES_VERSION=12.7-5.1C
, где 12.7-5.1C версия СУБД PostgreSQL (в формате "как в списке дистрибутивов на портале")
Например, сборка образа 1С 8.3.19.1417 с PostgreSQL 12.7-5.1C и Apache2 (релизы будут скачены с портала 1С, поэтому важно перед запуском подготовить файл ./distr/credentials):
docker build -t kron1sant/docker1c:8.3.19.1417-12.7-5.1C-apache2 --build-arg SRV1C_VERSION=8.3.19.1417 --build-arg POSTGRES_VERSION=12.7-5.1C --build-arg AUTO_DOWNLOAD_DISTR=1 --build-arg CRED=./distr/credentials --build-arg INSTALL_APACHE=1 .
Полученный образ можно запустить командой (пример для Windows с WSL2):
docker run -d -h docker1c -m 6g -p 8080:80 -p 1540:1540 -p 1541:1541 -p 1550:1550 -p 1560-1591:1560-1591 -p 5432:5432 -v /D/docker1c/logs1c:/data/logs1c -v /D/docker1c/config1c:/data/config1c --name docker1c-run kron1sant/docker1c:8.3.19.1417-12.7-5.1C-apache2
Для доступа к СУБД можно использовать супер пользователя usr1cv8 с паролем usr1cv8.
Для минимальной сборки с конкретной версией платформы 1С можно вызвать скрпит:
.\build_image.cmd 8.3.19.1417
Для запуска получившейся сборки:
.\run_image.cmd 8.3.19.1417
Для доступа с локальной (host) машины к docker-контейнеру нужно использовать ip адрес вирутальной машины WSL (docker-desktop). Причем 1С требует, чтобы ip адрес резолвился по имени указанному при запуске агента. Для этого:
- Стартуем docker-контейнер с указанием ключа -h и указываем любое имя сервера 1С 9(в примере выше - это docker1C), по котормоу будем работать с базами 1С (
docker run -h docker1c...
) - Получаем ip-адрес вирутальной машины с docker'ом. Например, в командной строке:
wsl -d docker-descktop
, после чего в терминале:ip -4 addr | grep eth0
- Добавляем в файл hosts полученный ip адрес и имя сервера указанное в ключе -h
Вместо пунктов 2 и 3 можно воспользоваться скриптом add_1C_docker_host.ps1
.
Сборка строится на базе образа Ubuntu:18.04. Дистрибутивы из каталога distr копируются в каталог $DISTR_DIR. Скрипты entrypoint.sh и deployer.sh размещаются в /usr/src/deploy1c/:
- deployer.sh - служит для распаковки архивов и устанвки 1С и postgres в момент пострения образа. Все дистрибутивы удаляются из образа после установки.
- entrypoint.sh - запускается postgres и 1С в момент запуска контейнера.
Можно запустить несколько контейнеров на одной машине, организовав таким образом кластер 1С. Для этого у второго контейнера надо:
- определить другое имя
-h docker1c_2
и прописать это имя в hosts (ip адрес тот же) - определить нестандартные порты:
-e SRV1CV8_PORT=2540 -e SRV1CV8_REGPORT=2541 -e SRV1CV8_RANGE=2560:2591
и-p 2540:2540 -p 2541:2541 -p 2550:2550 -p 2560-2591:2560-2591
(если просто пробросить порты при запуске контейнера без переопределния внутренних портов, кластер 1С будет нестабильным) Дополнительно можно: - указать единый сервер отладки:
e SRV1CV8_DEBUG_ADDR=docker1c
- отключить СУБД во втором контейнере:
-e POSTGRES_OFF=1
- ограничить память в 3Гб:
-m 3g
- сделать контейнер временным (после завершения работы, он полностью удалится):
--rm
Пример, выполняющий все описанные выше кейсы:
docker run -d --rm -h docker1c_2 -m 3g -p 2540:2540 -p 2541:2541 -p 2550:2550 -p 2560-2591:2560-2591 -v /D/docker1c/logs1c_2:/data/logs1c -v /D/docker1c/config1c:/data/config1c --name docker1c-run_2 -e SRV1CV8_PORT=2540 -e SRV1CV8_REGPORT=2541 -e SRV1CV8_RANGE=2560:2591 -e SRV1CV8_DEBUG_ADDR=docker1c -e POSTGRES_OFF=1 kron1sant/docker1c:8.3.19.1417-12.7-5.1C