Docker fĂĽr Server 2016
Windows-Container unter Windows Server
Docker fĂĽr Windows 10
16 GB Arbeitsspeicher sollte man hier schon verfügbar haben, mit 8 GB ärgert man sich nur über zahllose Abbrüche .
Windows-Container unter Windows 10
[Nachtrag 13.01.19] Mit Version 1809 ist Process Isolation für bessere Stabilität verfügbar.
Nach Installation die Computerverwaltung aufrufen und sich selber bei der Gruppe „docker-users“ eintragen. Danach neu anmelden, da Docker sonst nicht ausgeführt werden kann und einen sonst gleich mit der ersten Fehlermeldung begrüßt.
Docker ist vorgabemäßig auf Linux-Container eingestellt, als erstes hier mit „Switch to Windows Container“ auf letztere umstellen. Sonst kommen irreführende Fehlermeldungen mit Fehlern vom Hyper-V Start von MobyLinux.
Hier wurde bereits auf Windowscontainer umgestellt, dieser MenĂĽpunkt ist dann tabu.
Beim nächsten Start diese Meldung mit Ok bestätigen (-> Neustart).
Eventuell kommt auch eine bzlg. Hyper-V, die analog bestätigt werden muss. Alternativ kann man im Suchfeld „Windows-Features“ diese Form aufrufen und dort die Haken setzen.
Falls Docker nicht startet, "Experimental features" abschalten.
Achtung: Docker geht dann u.U. wieder auf Linux-Container und muss wieder auf Windows umgestellt werden. Nach docker pull… kommt sonst spätestens eine Fehlermeldung .
PowerShell als Admin starten, um die speziellen Cmdlets fĂĽr "NAV on Docker" zu installieren.
- Code: Alles auswählen
Install-module navcontainerhelper -force
Das Modul navcontainerhelper wird bei MS ständig weiterentwickelt. Für den aktuellen Stand:
- Code: Alles auswählen
Update-Module navcontainerhelper -force
Zum PrĂĽfen der Versionsnummer.
- Code: Alles auswählen
Get-Module -ListAvailable -name navcontainerhelper
Da bei Updates des NavContainerHelpers ältere Versionen nicht entfernt werden…
…hat man nach mehreren Updates leider den Effekt, dass die Cmdlets im Befehls-Add-on mehrfach angezeigt werden. Dieses kann durch den Parameter -AllVersions bei Deinstallieren
- Code: Alles auswählen
uninstall-module -Name navcontainerhelper -AllVersions
mit anschlieĂźendem Install-Module bereinigt werden.
Dokumentation
https://github.com/Microsoft/navcontainerhelper
Versionen (mit manueller Downloadoption)
https://www.powershellgallery.com/packages/navcontainerhelper/
Mit
- Code: Alles auswählen
Write-NavContainerHelperWelcomeText
erhielt man in Februar 2018 diese Ausgabe…
…und im September 2019 diese umfangreichere:
Docker in der PowerShell starten
Die Desktop-App Docker for Windows muss dafĂĽr vorher gestartet werden. Ein roter Wal in der Taskleiste bedeutet, dass es hat nicht geklappt hat. Dann klappt es aber meist beim zweiten Startversuch . Aufwendiger, aber stabiler ist diese Methode: Running NAV docker containers on a local Hyper-V Virtual Machine
Arbeitsspeicher zuweisen mit Schalter –m, Minimum 3GB oder mindestens 2500M. Wenn man davon genug hat, besser 4 GB .
- Code: Alles auswählen
docker run -e accept_eula=Y -m 3G microsoft/dynamics-nav
[Nachtrag 20.07.20] Die folgenden Anweisungen sind veraltet, weil MS nun nur noch Artefakte statt fertige Images auf Basis des Generic Image bereitstellt.
Image ziehen
Das Ziehen des ersten NAV-Images dauert relativ lange (im zweistelligen Gigabytebereich, typisch 15-17 GB (Nachtrag 1.12.18: Neue ltsc2019-Images nur noch 9-10 GB)), alle weiteren Pulls, die darauf aufbauen, laden nur die zusätzlich erforderlichen Teile dazu und gehen somit wesentlich schneller.
Dockerimages sind ab NAV 2016 verfügbar, die Technologie kann aber ggf. auch für ältere Versionen eingesetzt werden (s.u.). Support gibt es aber nur ab NAV 2016, und auch nur für Entwicklungs- und Testumgebungen, nicht für Echtsysteme .
Syntax
- Code: Alles auswählen
docker pull microsoft/dynamics-nav:[version[-cu][-country]]
FĂĽr die W1 oder die jeweils aktuelle NAV-Version mit dem aktuellsten CU kann man alle Zusatzparameter weglassen.
Das Minimum ist also diese Zeile, zieht aktuell NAV 2018 CU 02 W1, im nächsten Monat dann NAV 2018 CU 03 W1 usw.
- Code: Alles auswählen
docker pull microsoft/dynamics-nav
FĂĽr NAV 2017 CU 15 DE dann dagegen so mit allen Parametern:
- Code: Alles auswählen
docker pull microsoft/dynamics-nav:2017-cu15-de
Die CU-Nummer ohne Vornullen, also cu2, nicht cu02:
- Code: Alles auswählen
docker pull microsoft/dynamics-nav:2018-cu2-ch
FĂĽr das RTM-Release -rtm verwenden, cu0 funktioniert leider nicht .
Für NAV 2015 (oder noch ältere) stellt MS nichts bereit, man kann aber für diese Versionen versuchen, selber einen Container auf Grundlage des Generic Images (das ist das Grundlagenimage, auf das alle weiteren Teile in einem speziellen Image aufsetzen (microsoft/dynamics-nav:generic) aufzubauen, Anleitung dazu hier. Das wird aber immer aufwendiger, je älter die Version ist, weil die eingesetzten sonstigen Technologien sich natürlich auch weiterentwickelt haben.
Das allgemeine NAV-Repository ist nach Ende der Betaphase mittlerweile public und nicht mehr private, daher ist eine vorherige Anmeldung an Azure (die sich teilweise noch in den alten Dokus befindet) nicht mehr erforderlich, für nicht-öffentliche Previews neuer Versionen dagegen natürlich weiterhin schon.
Artikel von FreddyDK zu den verschiedenen Repositories: Which Docker Image is right for you?
Für Erstellung von BC-Container (also z.B. Appentwicklung für die Cloud) wird anstatt dynamics-nav nur bcsandbox in der Pull-Zeile des Images eingetragen, gefolgt von dem Ländercode, falls nicht die W1 benötigt wird.
- Code: Alles auswählen
docker pull microsoft/bcsandbox
docker pull microsoft/bcsandbox:de
docker pull microsoft/bcsandbox:at
docker pull microsoft/bcsandbox:ch
Wenn im Ausnahmefall nicht das aktuelle, sondern ein spezielles (= älteres) Build benötigt wird, muss das bei BC-Images exakt angeben werden.
- Code: Alles auswählen
docker pull microsoft/bcsandbox:12.0.21229.0-de
Falls das Image im Repository keine Veränderung zu einem bereits heruntergeladenen lokalen Image gleichen Namens hat, erfolgt kein erneuter Pull, sondern es kommt nur diese Meldung, hier für die aktuelle Version von NAV 2018 DE.
Status: Image is up to date for microsoft/dynamics-nav:2018-de
Bei MS werden allerdings auch vorhandene Images im Repository von Zeit zur Zeit neu aufgebaut, damit Korrekturen am Generic Image auch älteren Images zugutekommen.
Details dazu siehe hier: NAV on Docker 0.0.5.5 or… – What’s new
Mit dem Parameter -alwaysPull bei Erstellen von Containern kann man sicherstellen, dass das Image und damit der daraus erzeugte Container immer auf dem letzten Stand sind.
Der Stand des Generic Images ist beim Pull nach der Ausgabe der der NAV-Version ersichtlich.
NAV Version: 11.0.19394.0-de
Generic Tag: 0.0.5.4
Neuen Container aufsetzen und hochfahren
Mit Windows 10 dauert dieser Schritt spürbar länger (meist 7-10 Minuten) als mit Windows Server (meist 1-3 Minuten).
Minimaleingabe, hier auf Basis Image 2018, da trägt man das benötigte ein:
- Code: Alles auswählen
New-NavContainer -containerName mycontainer -imageName microsoft/dynamics-nav:2018 -accept_eula
Container mit accept_eula starten, dann erscheint das Fenster zur Windowspassworteingabe
Das hierbei eingegebene Passwort wird dabei auch mit dem Benutzer SA im Container gekoppelt.
Mit Zugang zu C/SIDE mit Export der Objekte als Text (in das Verzeichnis C:\ProgramData\NavContainerHelper\Extensions\...) zusätzlich Schalter und Pfad zur Lizenzdatei angeben
- Code: Alles auswählen
-includeCSide -licenseFile C:\temp\myLicenseFile.flf
Mit Zugang zu C/SIDE ohne Export der Objekte als Text
- Code: Alles auswählen
-includeCSide -doNotExportObjectsToText
Falls Datenbank im Container nicht angesprochen werden kann:
Hostsdatei
New-NAVContainer entweder mit zusätzlichem Parameter
- Code: Alles auswählen
-updateHosts
erzeugen (Achtung: löscht dabei eventuelle Kommentare dort)
oder die IP-Adresse des Containers (steht in der PowerShell-Ausgabe bei Containererzeugung) selber in die hosts-Datei eintragen, wenn man die direkten Desktoplinks nutzen möchte (Notepad++ dazu im Admin-Modus starten, das bietet das Programm aber ggf. beim Abspeicherversuch netterweise selbst an, wenn es merkt dass hierfür Adminrechte erforderlich sind ).
Pfad: C:\Windows\System32\drivers\etc\hosts
Bei Wahl des Containernamens auf eventuelle Tippfehler achten . Falls bereits ein Container gleichen Names existiert, wird dieser ohne Warnung entfernt und anhand der aktuellen Parameter neu erzeugt.
Zusammengesetzt hier eine typische Zeile fĂĽr den aktuellen NAV 2018 DE-Container mit weiteren Parametern wie -enableSymbolLoading (falls ExtensionsV2 mit der Containerdatenbank entwickelt werden sollen) und -alwaysPull (um beim Aufsetzen jeweils den aktuellen Stand des Images zu ziehen)
- Code: Alles auswählen
New-NavContainer -containerName nav2018de-last -imageName microsoft/dynamics-nav:2018-de -accept_eula -includeCSide -updateHosts -licenseFile C:\temp\mylicense.flf -enableSymbolLoading -alwaysPull -doNotExportObjectsToText
Hier fĂĽr einen Container einer RTM Version, hier Parameter rtm statt cu..
- Code: Alles auswählen
New-NavContainer -containerName nav2018de-cu00 -imageName microsoft/dynamics-nav:2018-rtm-de -accept_eula -includeCSide -updateHosts -licenseFile C:\temp\mylicense.flf -enableSymbolLoading -alwaysPull -doNotExportObjectsToText
Ab CU 01 dann so, weitere CUs analog.
- Code: Alles auswählen
New-NavContainer -containerName nav2018de-cu01 -imageName microsoft/dynamics-nav:2018-cu1-de -accept_eula -includeCSide -updateHosts -licenseFile C:\temp\mylicense.flf -enableSymbolLoading -alwaysPull -doNotExportObjectsToText
Datenbank mit C/SIDE öffnen
Falls nicht mit Windowsauthentifizierung möglich
• Umstellen auf Datenbankserver
• Benutzer: SA
• das eigene Windowskennwort eintippen (oder das, welches beim Containererstellen angegeben wurde)
Wichtig fĂĽr den Zugriff vom Web- oder Windowsclient und VS Code aus:
Je nach Anmeldeverfahren die benötigten User für den Container nach der Erstellung manuell anlegen. Auch der Administrator wird nicht automatisch dort angelegt.
New-NavContainerWindowsUser
New-NavContainerNavUser
Jeder Container verfügt über mehrere Pfade, über die mit dem Host Dateien ausgetauscht werden können.
Hier visualisiert mit dem Tool Kitematic.
Alternativ ĂĽber Cmdlet Get-NavContainerSharedFolders, mit Out-GridView bleiben auch lange Pfade in der Ausgabe komplett erhalten.
- Code: Alles auswählen
Get-navcontainersharedfolders <mycontainername> | Out-GridView
Ansonsten können mit
- Code: Alles auswählen
docker cp
Dateien vom Host in den Container kopiert werden.
Anzeige der gezogenen Images
- Code: Alles auswählen
docker images
Statusanzeige der Images (mit dem Schalter -a werden alle anzeigt, fĂĽr die Anzeige der aktuell laufenden diesen weglassen)
- Code: Alles auswählen
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Status}}"
Image löschen
- Code: Alles auswählen
docker rmi <Image ID>
Container auflisten. Vorne steht die ID (nur die ersten 12 Stellen davon), hinten der Name
- Code: Alles auswählen
docker container ls
NAV-Container entfernen mit Remove-NAVContainer
- Code: Alles auswählen
Remove-NavContainer -containerName <MyContainerName>
Die aktuelle Extension fĂĽr VSCode (.vsix) kann ĂĽber den Browser ĂĽber Port 8080 aus dem Container heruntergeladen werden. Der Link steht unten in der PowerShell nach Erzeugung des Containers.
z.B. http://mycontainername:8080/al-0.14.17291.vsix
Da das Build der VSCode-Extension ja immer genau zur NAV-Version der Datenbank des Containers passen muss, bekommt man diese hier praktischerweise also direkt mitgeliefert ( Nachtrag: Diese Situation hat sich etwas entspannt, vsix ab Version 2.x sind nunmehr abwärtskompatibel. Die vsix des Containers benötigt man aber weiterhin, wenn man für Previews kommender Releases entwickeln möchte, da bei einem tagesaktuellen Stand die im Container vorhandenen AL Language Extension ein höheres Build als die öffentliche Version im AppSource aufweisen wird).
Die Logdaten wie die IP des Containers, Servernamen, Downloadpfad für vsix u.v.a.m., die immer direkt nach der Erstellung angezeigt werden, kann man für ältere Container über diese Eingabe erneut abrufen.
- Code: Alles auswählen
docker logs <containername>
Allgemeine Links
https://docs.docker.com/ (Download und Doku)
Eine eigene Docker-ID samt Login auf docker.com ist für die Nutzung der NAV-Funktionen nicht erforderlich. Wenn man eine hat, kann man aber u.a. in der Dockercloud eigene Repositories anlegen und neben vielen docker pull… auch mal docker push… nutzen .
https://docs.microsoft.com/de-de/virtualization/windowscontainers
Docker fĂĽr NAV
https://hub.docker.com/r/microsoft/dynamics-nav/
http://aka.ms/navondockerhol (Download PDF Hands-on Lab)
http://www.github.com/microsoft/navcontainerhelper
http://www.github.com/microsoft/navcontainerhelper/issues
Troubleshooting
NAV/BC mit Docker
https://blogs.msdn.microsoft.com/freddy ... on-docker/
Falls der Dienst des Containers nach dem Erstellen nicht läuft (der Windowsclient meldet dann, dass unter Port 7046 kein Server gefunden wurde), mit dem PowerShell-Link in den Container gehen und dieses eingeben
- Code: Alles auswählen
start-navserverinstance -serverinstance NAV
Access your BC container behind traefik using the mobile app
Docker fĂĽr Windows
https://github.com/docker/for-win/issues
Docker auf VM-Server (verschachtelte Virtualisierung)
Dieses wird nicht offiziell supportet, d.h. es kann funktionieren, muss aber nicht.
https://docs.docker.com/docker-for-wind ... -scenarios
Tools
Kitematic: https://github.com/docker/kitematic/releases
Portainer: https://portainer.io/ (nicht fĂĽr Windows Server oder ID/Edge, geht nur mit Chrome, siehe Hinweise im Hands-on Lab PDF)
Sonstige Links
NAV mit Docker
https://community.dynamics.com/business/b/freddysblog (Voriger Blog: https://blogs.msdn.microsoft.com/freddyk/)
https://www.axians-infoma.de/navblog/
http://www.dynamicsblog.at/schnelleinstieg-docker-und-dynamics-nav/
Blogartikel von A.J. Kauffmann
Docker Tips for NAV Development Preview September Update
Running NAV docker containers on a local Hyper-V Virtual Machine
Container in Azure
https://demiliani.com/2018/03/22/nav-on-docker-running-it-on-an-azure-container-instance/
https://www.axians-infoma.com/techblog/running-multiple-nav-bc-containers-on-an-azure-vm/
https://www.axians-infoma.de/techblog/traefik-support-for-navcontainerhelper-the-nav-arm-templates-for-azure-vms-and-local-environments/
Videos
Docker and Dynamics NAV - Practical Use Cases
Docker-Technologie allgemein
https://jaxenter.de/docker-virtuelle-maschine-61779
https://jaxenter.de/docker-vs-vm-54816
https://fntlnz.wtf/post/why-containers/
Video auf Deutsch: https://www.axians-infoma.com/techblog/a-german-introduction-to-windows-containers/