Microsoft Dynamics NAV на Docker часть 2: заглянуть внутрь контейнера
В прошлый раз я рассказывал, как запустить NAV на Docker в принципе и как обратиться к веб-клиенту запущенного контейнера: https://community.dynamics.com/nav/b/russianerpexperience/archive/2017/10/31/microsoft-dynamics-nav-docker
В этом блоге я расскажу, как трогать файловую структуру контейнера и запускать Windows-клиента и классическую среду разработки контейнера.
Для всего этого можно писать длинные скрипты самому, а можно воспользоваться замечательным пакетом NavContainerHelper, который содержит в себе множество полезных командлетов для управления контейнером. Предлагаю установить и использовать его.
Основной репозиторий NavContainerHelper лежит здесь: https://github.com/Microsoft/navcontainerhelper
Для того, чтобы заполучить этот набор скриптов себе, нужно запустить Windows PowerShell (это не cdm!!!) от имени администратора:
и в открывшемся окне набрать и выполнить следующую команду:
Install-Module -Name navcontainerhelper
При установке может пару раз ругнуться и спросить, точно ли хотим ставить, жмём Yes:
или, если не хотите читать ругалки, запускаете с параметром -force:
Install-Module -Name navcontainerhelper -force
Далее, возможно, нужно будет разрешить менее злую политику запуска скриптов (по умолчанию будет Restricted). Это можно сделать например командлетом Set-ExecutionPolicy с параметром -Unrestricted (смогут выполняться неподписанные скрипты; имеется риск выполнения вредоносных скриптов!) или RemoteSigned.
Далее, полезно выполнить командлет update-help, чтобы докачать хелп с примерами:
Теперь запрашивая хелп с параметром -examples будем получать примеры использования параметров разных командлетов.
Далее, вводим:
Write-NavContainerHelperWelcomeText
и получаем следующую картинку с перечнем командлетов NavContainerHelper:
Перечень неполный, с полным перечнем, и информацией, как устроен каждый скрипт, можно ознакомиться тут: https://github.com/Microsoft/navcontainerhelper - например, раздел Misc будет содержать такие вот командлеты: https://github.com/Microsoft/navcontainerhelper/tree/master/Misc
Что это собственно нам даёт? Это даёт больше возможности управлять содержимым нашего контейнера. Итак, мы теперь можем отвечать на следующие вопросы:
Как запустить Windows-клиента или среду разработки контейнерного NAVа?
Это можно сделать, выполнив командлет New-NavContainer с параметром -IncludeCSide. Чтобы в принципе посмотреть параметры, с которыми можно запускать этот командлет, набираем:
help new-navcontainer -detailed
а чтобы получилась магия, запускаем контейнер с devpreview версией, например вот так:
new-navcontainer -accept_eula -containerName awara-it -imageName microsoft/dynamics-nav:devpreview -shortcuts Desktop -memoryLimit 2G -includeCSide -doNotExportObjectsToText
Если вы не указали логин и пароль в командной строке, то произойдёт запрос логина/пароля, который будет в дальнейшем использоваться в контейнере.
Если вы его ни разу ещё не запускали devpreview, Docker докачает дельту к тому, что вы скачивали в прошлый раз:
и запустится контейнер с именем awara-it:
и создадутся ярлыки на рабочем столе, содержащие ссылку на среду разработки и Windows-клиента, которые могут быть запущены, а также ярлыки на cdm и powershell, которые смотрят внутрь контейнера - т.е., запустив их, вы сможете, например, бродить по внутренней файловой системе контейнера:
Запускаем ярлык "awara-it Windows Client" - и вот, открывается классический клиент!
Как просмотреть файловое содержимое контейнера NAVа?
Собственно, можно например запустить cmd ярлык, созданный на предыдущем шаге, и с помощью команд dir и cd перемещаться по файловой структуре )).
Альтернативно, можно выполнить командлет Enter-NavContainer и, указав, в какой контейнер хочется попасть, получить туда доступ через NAV Container PowerShell prompt:
Как положить файл в контейнер или извлечь его оттуда?
Например, через общую папку. У контейнера и хоста есть общая папка. Узнать, какая папка общая, можно, запустив командлет Get-NavContainerSharedFolders - выведется папка контейнера и соответствующая ей папка хоста. Командами копирования можно перекидывать файл из структуры контейнера в общую папку и брать его на хосте.
Попробуйте самостоятельно повводить разные командлеты и посмотреть, как они работают. Дальше будет ещё интереснее!
*This post is locked for comments