В прошлый раз я рассказывал, как запустить 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 - выведется папка контейнера и соответствующая ей папка хоста. Командами копирования можно перекидывать файл из структуры контейнера в общую папку и брать его на хосте.

 

Попробуйте самостоятельно повводить разные командлеты и посмотреть, как они работают. Дальше будет ещё интереснее!