Стабильные релизы DaJet Studio размещаются на Docker Hub в виде Docker образов. Эти образы обновляются по мере выхода новых версий DaJet Studio. Существует два образа: для Linux и Windows. В качестве базового образа для Linux используется mcr.microsoft.com/dotnet/aspnet:8.0
, а для Windows - mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809
.
Сценарии GitHub Actions для сборки и публикации DaJet Studio на Docker Hub:
Для запуска DaJet Studio в Docker контейнере необходимо установить Docker или Docker Desktop. Второй вариант предпочтительнее для обычных пользователей, так как предоставляет удобный и интуитивно понятный интерфейс для управления образами и контейнерами. Получение образов DaJet Studio при помощи командной строки:
Linuх-образ DaJet Studio
docker pull zhichkin/dajet-studio:linux
Windows-образ DaJet Studio
docker pull zhichkin/dajet-studio:windows
Выполнение DaJet Studio в контейнере Docker по умолчанию осуществляется от имени пользователя с ограниченными правами. Это означает, что вся файловая система приложения доступна только для чтения и выполнения. Таким образом становится невозможным создание новых скриптов, их редактирование, а также настройка подключений к базам данных. Для того, чтобы решить эту проблему, необходимо запустить контейнер от пользователя, обладающего соответствующими правами.
Рассмотрим пример запуска DaJet Studio в контейнере для Linux. Настроим подключение DaJet Studio к базе данных под управлением MS SQL Server 2022, который работает на локальной машине, но не в контейнере.
Следующая команда запускает контейнер от пользователя root
, обладающего правами администратора системы в Linux.
docker run --name dajet-studio --user=root -it -p 5000:5000 zhichkin/dajet-studio:linux
После выполнения этой команды мы должны увидеть следующий консольный вывод:
При использовании Docker Desktop в списке контейнеров мы можем увидеть, например, следующее: появился новый контейнер с именем dajet-studio
и он работает.
Далее нужно запустить браузер на локальной машине и подключиться к DaJet Studio по адресу http://localhost:5000
.
Однако подключения к внешним по отношению к контейнеру базам данных будут недоступны. В данном примере используется локальная машина под управлением Windows 10 Pro. Для открытия выхода из контейнера “наружу” необходимо сделать, во-первых, доступным IP-адрес локальний машины, а также, во-вторых, открыть порт MS SQL Server 1433.
При установке Docker Desktop создаёт сопоставление локального IP-адреса имени host.docker.internal
. Это можно увидеть в системном файле Windows hosts
.
Таким образом мы можем отредактировать строку подключения к базе данных следующим образом:
Data Source=host.docker.internal;Initial Catalog=my-database;Integrated Security=True;Encrypt=False;
Далее нужно настроить правило для входящих соединений на локальной машине, другими словами открыть порт 1433. Это можно легко сделать в панели управления Windows Defender Firewall.
Можно указать порт SQL Server в строке подключения:
Data Source=host.docker.internal, 1433;Initial Catalog=my-database;Integrated Security=True;Encrypt=False;
Однако, если после этого попытаться подключиться к базе данных, то у нас ничего не получится. Дело в том, что базовый Linux-образ от Microsoft, который мы используем, не имеет установленного по умолчанию Kerberos, а, следовательно, инструкция Integrated Security=True
в строке подключения выше не будет работать. В частности, мы можем увидеть следующий текст ошибки в консольном выводе.
Cannot load library libgssapi_krb5.so.2
Error: libgssapi_krb5.so.2: cannot open shared object file: No such file or directory
В таком случае используем аутентификацию SQL Server, например, таким образом:
Data Source=host.docker.internal;Initial Catalog=my-database;User ID=sa;Password=sa;Encrypt=False;
Для скриптов DaJet Script аналогичная настройка подключения может выглядеть следующим образом:
DECLARE @table array
USE 'mssql://sa:sa@host.docker.internal/my-database'
SELECT TOP 3 Наименование
INTO @table
FROM Справочник.Номенклатура
END
RETURN @table
Таким образом мы рассмотрели один из простейших случаев настройки и запуска DaJet Studio в контейнере Docker.