Machine: Stellen Sie eine Verbindung zur Windows Docker-Engine her

Erstellt am 22. Jan. 2016  ·  60Kommentare  ·  Quelle: docker/machine

Hat jemand angefangen, einen Docker-Maschinentreiber und Provisioner für Windows Docker-Engines hinzuzufügen oder darüber nachzudenken?
Jeder kann also Docker-Computer verwenden, um ein Windows Server 2016 TP4 so einfach zu sichern und eine Verbindung herzustellen, wie wir es für eine Linux Docker Engine verwenden?

Etwas wie:

docker-machine create -d generic --generic-winrm-user "administrator" ... dev
docker-machine create -d azure --azure-username "administrator" --azure-winrm-port 5985 ... dev

Verwenden von WinRM (HTTP / HTTPS) anstelle von SSH, um auf den Remote-Windows-Server zuzugreifen, die TLS-Zertifikate darin abzulegen und den Windows Docker-Dienst und andere Dinge neu zu konfigurieren.
Ich weiß, dass der Packer Kommunikatoren für SSH und WinRM für die Bereitstellung in Go integriert hat.
Einfach die Punkte verbinden ...

ping @ahmetalpbalkan : lächeln:

arewindows kinenhancement

Hilfreichster Kommentar

Ich habe die Anweisungen von @ jen20 befolgt , um ein Windows AMI mit SSH zu erstellen. Es funktioniert mit Docker Machine bis zur Bereitstellung, wo es fehlschlägt, weil keine /etc/os-release -Datei vorhanden ist. Können wir jetzt, da SSH unter Windows verfügbar ist (mit einigem Aufwand), einen SSH-basierten Docker Machine Provisioner für Windows erhalten?

Alle 60 Kommentare

Aufgrund der Art und Weise, wie das Provisioner-Modell derzeit funktioniert, ist es möglicherweise nicht zu verrückt, solche Funktionen zu implementieren, obwohl einige ziemlich grundlegende Annahmen (z. B. das Vorhandensein von SSH) überdacht oder dokumentiert werden müssten.

Ich habe das Gefühl, dass die Art und Weise, wie es implementiert werden muss, darin besteht, einige Flags zu haben, die speziell darauf hinweisen, dass es sich um einen Windows-Computer handelt. zB --generic-winrm-userpass .

Ich weiß nicht viel über Windows Server-Container, aber wie Nathan sagte, würde der größte Teil der Arbeit darin bestehen, das SSH-Protokoll unter Windows zu erhalten, indem man entweder darauf wartet, dass Microsoft es tut (es passiert) oder eine Polyfüllung mit WinRM bereitstellt (ich nicht) wissen, wie es überhaupt funktioniert).

Ich erinnere mich, dass einige Diskussionen darüber auch intern stattfanden. cc: @jstarks wie er im Windows Container Team ist.

Wenn Sie denken, Sie können einen Prototyp erstellen, würde ich sagen, machen Sie mit.

Hallo @StefanScherer , ich bin PM im Hyper-V-Team und dies als Betriebssystem verwenden könnten, das Docker Machine ziehen könnte. Wenn wir Nano verwenden, bleibt es ein kleiner Download. Das Repo für das Open SSH in Windows-Projekt ist hier .

Alle Ideen sind willkommen und wenn Sie einen Prototyp erstellen möchten, lassen Sie es mich bitte wissen. Ich werde hier weiter posten, wenn ich mehr darüber erfahre, wie das funktioniert.

cc: @dgageot

@ enderb-ms Oh, ein Nano-Bild, das wäre auch toll. OpenSSH ist ebenfalls eine Option. In der Zwischenzeit haben andere Projekte wie Packer und Vagrant die Windows-Unterstützung verbessert, um WinRM zu verwenden und SSH zu entfernen, um eine nativere Kommunikation zu ermöglichen.

Was ich mir als ersten Schritt überlegt habe, ist, Docker-Maschine mit einem TP4-Server verbinden zu lassen, z. mit dem generischen Treiber.

Ich habe den Azure-Treiber noch nicht ausprobiert. Ich denke darüber nach, eine TP4 VM + Docker-Engine-Vorlage bei Azure auszuwählen, und Docker-Computer weiß dann, dass eine Windows-VM anstelle einer Linux-VM bereitgestellt werden muss. Es müssen nur einige minimale Schritte ausgeführt werden, um den lokalen Computer, auf dem Docker-Computer ausgeführt wird, mit dieser Remote-Docker-Engine zu verbinden.

Dies sind die Schritte eines generischen Treibers, der auf einer Linux-VM ausgeführt wird, auf der Docker bereits installiert ist. Ich habe einige Ideen für Windows hinzugefügt:

  1. Docker-Maschine stellt eine Verbindung zur Remote-IP-Adresse her
  2. Überprüfen Sie die Version des Betriebssystems, wenn sie bereitgestellt werden könnte (cat / etc / os-release -> stattdessen einige Windows-Informationen abrufen).
  3. Hostname aktualisieren?
  4. Update / etc / hosts
  5. Curl installieren (nicht erforderlich, um es auf Windows-Hosts zu installieren)
  6. Überprüfen Sie, ob Docker installiert ist. Wenn nicht, installieren Sie es. (Führen Sie wahrscheinlich die gesamte Install-ContainerHost.ps1 aus?)
  7. Überprüfen Sie die Docker-Version
  8. Erstellen Sie das Konfigurationsverzeichnis des Dockers (/ etc / docker ->% ProgramData% / docker).
  9. Docker-Service beenden
  10. ca.pem einfügen (Windows:% ProgramData% / docker / certs.d)
  11. Fügen Sie server.pem ein
  12. Fügen Sie server-key.pem ein
  13. Schreiben Sie die Konfigurationsdatei des Dockers (/ etc / default / docker, wahrscheinlich eine Erweiterung von% ProgramData% / docker / runDockerDaemon.cmd).
  14. Starten Sie den Docker-Dienst
  15. netstat -an

Phase 1:

Für das Azure / Local TP4 mit vorinstalliertem Docker-Engine-Szenario:

Schritt 1.) Es muss WinRM (z. B. ein Blick auf den WinRM- Kommunikator des Packers) anstelle von SSH verwendet werden.

Schritt 2.) könnte überprüfen, ob alles läuft und ob die VM ein TP4 ist. Andernfalls brechen Sie ab, wenn nicht alles installiert werden kann, z. B. ohne Neustart.

Anschließend müssen die Schritte 9.) ... 14.) ausgeführt werden, um den Docker zu stoppen, die TLS-Zertifikate einzufügen und den Docker neu zu starten. Nachdem dieser Docker-Computer die Verbindung zu einer vorhandenen Azure-VM / lokalen oder lokalen Windows-VM hergestellt und den Docker-Port gesichert hat.

Phase 2:

Später könnte Schritt 2.) erweitert werden, damit "leere" 2016-Server Docker mit Schritt 6 installieren können.)

Phase 3:

Und dann eine "boot2docker.iso" mit einem Nano-Image zum lokalen Download.

Nur ein paar erste Gedanken ;-)

@dgageot hast du vor, das anzukurbeln? Wenn nicht, sollten wir die Microsoft-Mitarbeiter in die richtige Richtung weisen, damit sie versuchen können, Fortschritte zu erzielen

@friism Mit @ enderb-ms wird bereits gearbeitet

@dgageot großartig! Gibt es einen Ort, an dem ich mehr Details erfahren kann?

@dgageot Ich habe eine Änderung, mit der Windows-Serverinstanzen in Azure

Kurze Beschreibung dessen, was ich getan habe

  1. Unterstützung für das Hochfahren von Windows-Images hinzufügen.
  2. Verwenden Sie das Windows Server 2016 TP4-Image in Azure
  3. Dreh es auf. Ich verwende die Bibliothek https://github.com/Azure/azure-sdk-for-go anstelle des verkauften Codes in https://github.com/docker/machine/tree/master/vendor/github.com/. MSOpenTech / azure-sdk-for-go , das scheint eine ältere Version zu sein.
  4. Verwenden Sie WinRM, um eine Verbindung zur Instanz herzustellen, und installieren Sie die Docker-Engine
  5. Führen Sie alle anderen Schritte aus. Ich habe festgestellt, dass das Netzwerk manchmal durcheinander gerät und der Vswitch eingerichtet werden muss.

cc @ahmetalpbalkan

@ppadala Erstaunlich

hawt

Danke @stefanfoulis @friism. Die Arbeit befindet sich unter https://github.com/containerx/machine , aber dazu gehören auch einige andere Änderungen, die nichts mit dieser PR zu tun haben.

Ich erstelle einen neuen Zweig, Bereinigungscode und werde bald eine Pull-Anfrage senden.

Ich habe die Pull-Anfrage gestellt, Kommentare und Bewertungen sind willkommen.

Es gibt noch ein paar fest codierte Elemente, die bearbeitet werden müssen und die ich in den nächsten Tagen reparieren werde.

@ppadala wirklich schön. Ich denke, @ enderb-ms & Docker-Machine-Betreuer versuchen derzeit herauszufinden, ob sie WinRM oder Bootstrap OpenSSH unter Windows verwenden sollten. Ich werde diese Leute entscheiden lassen, welche Arbeit vorwärts gehen soll.

Was den Azure-Treiber betrifft, können wir leider keine Änderungen am azure -Treiber vornehmen. Ich habe gerade den Azure-Treiber mit dem Azure Resource Manager-Stack neu geschrieben (dies ist eine große Änderung). Details finden Sie unter: https://github.com/docker/machine/issues/2742#issuecomment -189993875 Wir behandeln derzeit Probleme mit Flakiness im Azure SDK. Sobald diese erledigt sind, sende ich eine PR, um das neue Azure freizugeben Treiber.

@ppadala Es ist auch wichtig, dass dies wahrscheinlich nicht nur eine azure Treiberänderung sein sollte, sobald so ziemlich alle Cloud-Anbieter WS2016-Images haben und (falls erforderlich) Docker-Computer wahrscheinlich diese Windows-spezifischen Flags hinzufügen müssen.

@ppadala wirklich schön. Ich denke, @ enderb-ms & Docker-Machine-Betreuer versuchen derzeit herauszufinden, ob sie WinRM oder Bootstrap OpenSSH unter Windows verwenden sollten. Ich werde diese Leute entscheiden lassen, welche Arbeit vorwärts gehen soll.

Ich habe auch die SSH-Option in Betracht gezogen. Ich mochte den Windows OpenSSH-Server, den ich ausprobiert habe, einfach nicht, hatte Probleme mit der Verbindung zum Server von OS X. Das heißt, ich habe nicht alle möglichen SSH-Server ausprobiert, ihr wisst es besser. Lassen Sie mich gerne in die Diskussion einsteigen und lassen Sie mich wissen, wo die Diskussion stattfindet.

Was den Azure-Treiber betrifft, können wir leider keine Änderungen am Azure-Treiber vornehmen. Ich habe gerade den Azure-Treiber mit dem Azure Resource Manager-Stack neu geschrieben (dies ist eine große Änderung). Details finden Sie unter: # 2742 (Kommentar) Wir befassen uns derzeit mit Flakiness-Problemen im Azure SDK. Sobald diese erledigt sind, sende ich eine PR, um den neuen Azure-Treiber freizugeben.

Keine Sorge, die Änderung, die ich vorgenommen habe, betrifft nicht nur den Azure-Treiber, sondern auch den Rest der Docker-Maschine, um eine Option für das Betriebssystem hinzuzufügen. Ich werde Ihren Code auf # 2742 ausprobieren. Unterstützt der Code bereits das Hochfahren von Windows-Images in Azure?

@ppadala Es ist auch wichtig, dass dies wahrscheinlich nicht nur eine Änderung des Azure-Treibers ist, da so gut wie alle Cloud-Anbieter WS2016-Images haben und (falls erforderlich) Docker-Computer wahrscheinlich diese Windows-spezifischen Flags hinzufügen müssen.

Wie oben erwähnt, enthält meine Änderung sowohl den Azure-Treiber als auch die restlichen Docker-Computer-Änderungen. Wie sollen wir von hier aus vorgehen? Ich kann warten, bis die Änderungen Ihres Ressourcenmanagers festgeschrieben werden, und dann können wir herausfinden, ob Docker-Maschinen Windows-spezifische Flags hinzugefügt werden.

@ahmetalpbalkan Ich habe den Code überprüft, den Sie in # 2742 gepostet haben. Soweit ich weiß, wird der Treiber auf die Verwendung von ARM-APIs verschoben, und Windows-Images werden nicht unterstützt. Folgendes schlage ich vor

  1. Überprüfen Sie Ihren Code und legen Sie ihn fest
  2. Unterstützung für das Hochfahren von Windows-Images hinzufügen
  3. Fügen Sie den Windows-Provisioner mit WinRM (oder SSH, wenn wir uns darauf einigen), Flags und anderen Änderungen im Docker-Computer-Kern hinzu

Ich habe 2 und 3 mit dem aktuellen Treiber durchgeführt und kann ähnliche Änderungen basierend auf Ihrem ARM-basierten Treiber vornehmen. Lass mich wissen was du denkst.

@ppadala klingt gut. Wenn Sie versuchen, Ihren Code über meinem Zweig neu zu basieren, können Sie die Blockierung aufheben und mit der Arbeit beginnen. In Bezug auf die Funktionalität ist der neue Treiber bereit, aber wir beheben noch einige Probleme in azure-sdk-for-go. Diese können noch einige Zeit in Anspruch nehmen (z. B. ein paar Wochen), und ich werde das Endergebnis als Pull senden Anfrage.

@ppadala das ist
Einer der Gründe, warum wir SSH verwenden möchten, um Entwicklern auf anderen Plattformen (Linux und OS X) die Bereitstellung von Windows-Containerhosts in VMs auf ihren lokalen Computern oder in der Cloud zu ermöglichen. Wir haben darüber gesprochen, möglicherweise OpenSSH in einige Azure-Images aufzunehmen. Auf diese Weise wären keine zusätzlichen Schritte erforderlich, um diese Funktion hinzuzufügen. Können Sie mir mehr über die Probleme erzählen, die Sie mit OpenSSH gesehen haben?
Tagging @dgageot, der auch einige Gedanken über WinRM hatte.
Auch dies ist großartig, danke, dass du dieses @ppadala gemacht hast

@ppadala das ist
Einer der Gründe, warum wir SSH verwenden möchten, um Entwicklern auf anderen Plattformen (Linux und OS X) die Bereitstellung von Windows-Containerhosts in VMs auf ihren lokalen Computern oder in der Cloud zu ermöglichen. Wir haben darüber gesprochen, möglicherweise OpenSSH in einige Azure-Images aufzunehmen. Auf diese Weise wären keine zusätzlichen Schritte erforderlich, um diese Funktion hinzuzufügen. Können Sie mir mehr über die Probleme erzählen, die Sie mit OpenSSH gesehen haben?

Ich habe https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH als SSH-Server eingerichtet. Wenn ich ssh <Server> <cmd> von einem Mac aus starte, scheint es nicht zu funktionieren, obwohl einfaches interaktives ssh für den Server funktioniert.

Wenn Sie einen SSH-Server in Azure-Images einbinden, ist dies definitiv sauberer. Die Docker-Machine-Treiberschnittstelle scheint bereits davon auszugehen, dass SSH-Zugriff verfügbar ist.

@ppadala Eigentlich habe ich gerade festgestellt, dass es einige Bibliotheken gibt, die WinRM-Kommunikation unter Linux und Mac OS X ermöglichen, was alles vorerst viel einfacher machen würde. Sie verwenden diese Bibliothek für die WinRM-Kommunikation, richtig? Wissen Sie, ob das unter Linux und Mac OS X funktioniert?

@ppadala Eigentlich habe ich gerade festgestellt, dass es einige Bibliotheken gibt, die WinRM-Kommunikation unter Linux und Mac OS X ermöglichen, was alles vorerst viel einfacher machen würde. Sie verwenden diese Bibliothek für die WinRM-Kommunikation, richtig? Wissen Sie, ob das unter Linux und Mac OS X funktioniert?

Ja, ich verwende die Packerbibliothek. Es funktioniert sowohl unter Mac OS X als auch unter Linux.

@ppadala die ssh vs winrm diskussion ist sehr interessant:

  • SSH ist nett, weil es bedeutet, dass der Computer immer das gleiche Protokoll verwendet, um mit Hosts zu kommunizieren (egal ob es sich um Linux oder Windows handelt).
  • winrm ist nett, weil es nicht darum geht, neue / fremde Software auf Windows zu jammen

@ppadala Es scheint, als winrm automatisch aktivieren, wenn Sie auf Azure mit EnableWinRMHttp bereitstellen. Details hier: https://msdn.microsoft.com/en-us/library/azure/dn495299.aspx

@ enderb-ms @ taylorb-microsoft Welches Startbild für WS2016 sollte dafür verwendet werden?

@ppadala Es scheint, als https://msdn.microsoft.com/en-us/library/azure/dn495299.aspx

Ich mache dies bereits, wodurch die Ports in Azure geöffnet werden. Für das Image muss außerdem WinRM aktiviert und die Windows-Firewall-Regel korrekt eingerichtet sein. Vielleicht können sich Microsoft-Leute hier einschalten, wenn ich das falsch verstehe.

in Bezug auf die Frage von WinRM vs OpenSSH.

Ich denke, beides sollte letztendlich eine Option sein ... OpenSSH für Windows arbeitet derzeit (https://github.com/PowerShell/Win32-OpenSSH), ist aber noch nicht vollständig (zum Beispiel funktioniert es auf Nano Server noch nicht ). Daher denke ich, dass WinRM momentan eine gute Option ist, und dann können wir OpenSSH überlagern, sobald es für die Parität mit Linux-Erfahrungen verfügbar ist.

Hallo @ppadala , einige meiner Mitarbeiter haben einige Fragen zu dem Update, das Sie für den Azure-Treiber planen:

  1. Haben Sie Pläne, es mit Nano Server zu testen? Wie wählt der Treiber das Betriebssystem aus?
  2. Funktioniert dieses Szenario mit den Änderungen, die Sie vornehmen werden? "Der Benutzer verwendet die Docker-Computer-Erstellungsfunktion mit dem Azure-Treiber, um eine Windows-Container-Host-VM bereitzustellen, und verwendet dann die Docker-Computer-Umgebung, um die Verwaltung der Container von der VM von ihrem Client aus zu starten."
  3. Wie sieht der Befehl "Docker-Maschine erstellen" für Windows aus?

Ich will auch nicht aufdringlich sein, aber ich bin neugierig, eine Idee, wann Ihre PR läuft? Nochmals vielen Dank dafür!

In Bezug auf @friism ‚s Frage, wenn dies die Arbeit mit den Voll Server und Nano Server Bildern von WS2016, das wäre perfekt.

  1. Haben Sie Pläne, es mit Nano Server zu testen? Wie wählt der Treiber das Betriebssystem aus?

Ja. Der Treiber dreht einfach jedes Windows-Server-Image hoch, das als Option angegeben wurde, ähnlich wie das Linux-Image mit der Option --azure-image ausgewählt wird. Der besagte Nano-Server muss getestet werden.

  1. Funktioniert dieses Szenario mit den Änderungen, die Sie vornehmen werden? "Der Benutzer verwendet die Docker-Computer-Erstellungsfunktion mit dem Azure-Treiber, um eine Windows-Container-Host-VM bereitzustellen, und verwendet dann die Docker-Computer-Umgebung, um die Verwaltung der Container von der VM von ihrem Client aus zu starten."

Ja. Dies ist der Hauptanwendungsfall. Die Client-Funktionalität bleibt unverändert, da wir lediglich einen Windows Server Docker-Host hochfahren und Ports einrichten. Wenn die Windows-Docker-Engine dies unterstützt (was auch der Fall ist), funktioniert dies.

  1. Wie sieht der Befehl "Docker-Maschine erstellen" für Windows aus?

Zusätzliche Optionen wären --azure-os "windows", --azure-winrm-username "username", --azure-winrm-password "password", ähnlich wie oben von @StefanScherer vorgeschlagen.

In Bezug auf die Zeitachse habe ich den größten Teil meiner Änderungen bereits mit dem neuen Azure-Treiber (https://github.com/docker/machine/pull/3159) neu festgelegt, aber @ahmetalpbalkan , ich und einige andere haben ein Problem mit der Authentifizierung festgestellt (https: //github.com/docker/machine/issues/3201) und @ahmetalpbalkan haben einen Kommentar zum

Nehmen Sie an Build teil? Wäre toll, persönlich zu synchronisieren.

@ppadala Ich werde da sein! Docker veranstaltet am 30. um 12 Uhr ein Mittagessen in Delarosa, 37 Yerba Buena. Ping @ ah3rz für Details

@ppadala Ich werde nicht bei Build sein, aber mein Manager @ taylorb-microsoft wird es sein, damit du dich mit ihm synchronisieren kannst :-)

@ppadala Sie erwähnten , dass Sie waren nicht blockiert , lassen Sie uns wissen , ist es alles , was wir zu Hilfe tun.

Aktualisieren. Ich habe den größten Teil der Änderung neu erstellt und kann Windows-Server hochfahren. Bereinigen Sie den Code, der in wenigen Tagen zum Ziehen eingereicht werden soll.

Wir müssen uns jedoch für das Windows-Server-Image entscheiden, das als Ziel-VM-Image verwendet werden soll. Für das aktuelle offizielle Windows Server Core-Image ist nur RDP aktiviert. Ich brauche WinRM, um im Image aktiviert zu sein. Beachten Sie, dass es nicht darum geht, WinRM über Azure (https://msdn.microsoft.com/en-us/library/azure/dn495299.aspx) zu aktivieren, wie nur wenige vorgeschlagen haben. Dadurch werden nur WinRM-Ports in Azure geöffnet. Die laufende Instanz des Bildes (die später über sysprep in ein neues Bild aufgenommen wurde) sollte die folgenden Befehle ausgeführt haben.

PS C:\> winrm set winrm/config/service/auth @{Basic=”true”}
PS C:\> winrm set winrm/config/service @{Allowunencrypted=”true”}
PS C:\> New-NetFirewallRule -Protocol TCP -LocalPort 5985 -Direction Inbound -Action Allow -DisplayName winrm
PS C:\> winrm quickconfig

Ein weiterer Nachteil ist, dass die Installation der Docker-Engine viel länger dauert als die Installation auf Linux-Seite. Die VM muss ebenfalls neu gestartet werden. Ich verwende die folgenden Befehle für die Installation der Docker-Engine.

PS C:\> wget -uri https://aka.ms/tp4/Install-ContainerHost -OutFile C:\Install-ContainerHost.ps1
PS C:\> powershell.exe -NoProfile C:\Install-ContainerHost.ps1 -HyperV

Reboot

PS C:\> Install-ContainerImage -Name WindowsServerCore -Version 10.0.10586.0
PS C:\> wget https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/live/windows-server-container-tools/Update-ContainerHost/Update-ContainerHost.ps1 -OutFile Update-ContainerHost.ps1
PS C:\> ./Update-ContainerHost.ps1

Fragen an @ enderb-ms und @ahmetalpbalkan : Kann Microsoft ein Image bereitstellen, für das WinRM aktiviert ist? Sollten wir dabei in Betracht ziehen, die Docker-Engine auch damit zu bündeln, anstatt sie bei Bedarf zu installieren? Obwohl dies Benutzer auf eine bestimmte gebündelte Version der Docker-Engine beschränkt, wird die VM viel schneller verfügbar sein (andernfalls führt der Benutzer die Docker-Maschine aus und wartet eine Stunde oder länger, bis er seinen Windows Server-Docker-Host erhält.).

Derzeit habe ich ein benutzerdefiniertes Image erstellt, auf dem sowohl WinRM als auch Docker-Engine installiert und konfiguriert sind.

@ppadala ist die Filiale irgendwo öffentlich? Können Sie beim Starten der VMs keine Init-Skripte wie hier ausführen? https://github.com/Azure/azure-quickstart-templates/blob/875d139c16c9c023dce519e6dd48c707e3473346/201-vm-winrm-windows/azuredeploy.json#L183

@ppadala ist die Filiale irgendwo öffentlich? Können Sie beim Starten der VMs keine Init-Skripte wie hier ausführen? https://github.com/Azure/azure-quickstart-templates/blob/875d139c16c9c023dce519e6dd48c707e3473346/201-vm-winrm-windows/azuredeploy.json#L183

Die Filiale ist öffentlich, aber ich habe die letzte noch nicht eingecheckt. Lassen Sie mich sehen, ob ich das schaffen kann.

@ppadala ist die Filiale irgendwo öffentlich? Können Sie beim Starten der VMs keine Init-Skripte wie hier ausführen? https://github.com/Azure/azure-quickstart-templates/blob/875d139c16c9c023dce519e6dd48c707e3473346/201-vm-winrm-windows/azuredeploy.json#L183

Ich habe versucht, die Ressourcen weiterzugeben, habe aber einen Fehler erhalten

Error creating machine: Error in driver during machine creation: compute/VirtualMachinesClient:CreateOrUpdate 400 Failure responding to request -- Original Error: azure: Service returned an error. Code="InvalidRequestContent" Message="The request content was invalid and could not be deserialized: 'Could not find member 'resources' on object of type 'ResourceDefinition'. Path 'resources', line 1, position 953.'." Status=400

Hier ist der Code, der dies versucht: https://github.com/ppadala/machine/blob/azure-windows/drivers/azure/azureutil/azureutil.go#L540. Sie können die Commits https://github.com/ppadala/machine/commits/azure-windows sehen, um meine Änderungen zu sehen, um Windows-Unterstützung zu erhalten.

Der richtige Weg, dies zu tun, besteht darin, dass Azure go-sdk eine benutzerfreundliche Funktion zum Vorbereiten dieser Bereitstellungsvorlage bereitstellt. Es ist schwierig, die richtigen Inhalte zu übersetzen, indem Sie sich die JSON-Bereitstellungsvorlagen ansehen. @ahmetalpbalkan , irgendwelche Gedanken?

Im Wesentlichen gibt es zwei Wege.

  1. Lassen Sie ein benutzerdefiniertes Image mit WinRM (und möglicherweise Docker-Engine) installieren und konfigurieren. Dann ist der Code, den ich bisher habe, fertig.
  2. Beginnen Sie mit dem allgemeinen Windows Server 2016-Image, finden Sie heraus, wie die Installation über Vorlagen erfolgt, und fahren Sie dann mit den restlichen Schritten wie dem Hochladen von Zertifikaten usw. fort.

@ppadala Ich bin auch verwirrt. Ich wette, die API versucht zu sagen, dass Sie keine Erweiterungen für den VM-Erstellungsaufruf angeben können. Wenn Sie beispielsweise eine ARM-Vorlage mit Erweiterungen bereitstellen und die Bereitstellung beobachten, erstellt ARM zuerst die VM und anschließend die Erweiterungsressource separat, sobald die VM erstellt wurde ...

Es müssen einige Methoden vorhanden sein, um den VMs im Paket arm/compute Erweiterungen hinzuzufügen. Ich schlage vor, nach dem Erstellen der VM Erweiterungen hinzuzufügen, die Sie entsperren sollten.

Danke @ahmetalpbalkan. Ich habe VirtualMachineExtension nach der VM-Erstellung hinzugefügt und es hat funktioniert. Ich musste ein wenig ringen, um herauszufinden, wie WinRM-HTTPS-Listener richtig eingerichtet werden können, aber ich habe die Pull-Anfrage Nr. 3329 parat. Sag mir Bescheid, wenn du irgendwelche Kommentare hast.

Ich habe die Binärdateien auch unter https://www.dropbox.com/sh/kpc46xtc8su2sj7/AABtxVIVbGo8KLy7tu6HnWwza?dl=0 zum einfachen Testen hochgeladen.

Verwendung: Dem Azure-Treiber werden drei neue Parameter hinzugefügt

--azure-os "linux"                  OS for the Azure VM (Windows|Linux)
--azure-winrm-user "docker-user"    Username for WinRM login [$AZURE_WINRM_USER]
--azure-winrm-password              Password for WinRM login [$AZURE_WINRM_PASSWORD]

Beispielbefehl

docker-machine -D create -d azure --azure-subscription-id $(cat ~/azure/subid) --azure-os "windows" --azure-image MicrosoftWindowsServer:WindowsServer:2016-Technical-Preview-with-Containers:2016.0.20151118 --azure-winrm-password "mysecretpassword" vhost-win-test

@ppadala @ahmetalpbalkan Ich weiß nicht, ob Sie dies bereits integriert haben, aber dieser Artikel zum Sichern des Windows-Daemons kann auch gut sein: https://github.com/Microsoft/Virtualization-Documentation/tree/master/windows-server- Container-Tools / DockerTLS

/ cc @PatrickLang @swernli

@ppadala Danke, das ist total genial. Ich habe gerade versucht, mit dem Beispielbefehl einen TP4-Computer in Azure zu erstellen. Und ja, es hat sofort mit Ihren vorgefertigten Binärdateien funktioniert. (OK, Sie müssen ein komplexeres Kennwort eingeben, um die Anforderungen an die Windows-Kennwortkomplexität zu erfüllen.)

Eine gesicherte Docker Engine mit einem so einfachen Docker-Maschinenbefehl. Das ist ein großer Durchbruch!

$ ./docker-machine-Darwin-x86_64 -D create -d azure --azure-subscription-id $(pass azure) --azure-os "windows" --azure-image MicrosoftWindowsServer:WindowsServer:2016-Technical-Preview-with-Containers:2016.0.20151118 --azure-winrm-password $(pass azure-winrm-password) vhost-win-test
$ eval $(./docker-machine-Darwin-x86_64 env vhost-win-test)
$ docker version
Client:
 Version:      1.10.1
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   9e83765
 Built:        Fri Feb 12 22:11:40 UTC 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.10.0-dev
 API version:  1.22
 Go version:   go1.5.1
 Git commit:   59a341e
 Built:        Fri Nov 13 17:23:07 UTC 2015
 OS/Arch:      windows/amd64

@ppadala Und was noch fantastischer ist, ist, dass ein docker-machine rm -f vhost-win-test ALLES bereinigt - ich hatte so viele Probleme, alle Teile einer VM zu bereinigen, die mit "Deploy to Azure" erstellt wurden, und habe immer die Schaltfläche "Undeploy from Azure" übersehen 😄

@ppadala @ahmetalpbalkan Ich weiß nicht, ob Sie dies bereits integriert haben, aber dieser Artikel zum Sichern des Windows-Daemons kann auch gut sein: https://github.com/Microsoft/Virtualization-Documentation/tree/master/windows-server- Container-Tools / DockerTLS

Danke für den Link @friism. Ja, die Docker-Engine ist bereits mit TLS ähnlich wie Linux gesichert. Der Workflow zum Erstellen von Docker-Maschinen generiert die Anmeldeinformationen (Zertifikat, Schlüssel und CA) und ich verwende WinRM, um sie auf Windows Server hochzuladen.

@ppadala Danke, das ist total genial. Ich habe gerade versucht, mit dem Beispielbefehl einen TP4-Computer in Azure zu erstellen. Und ja, es hat sofort mit Ihren vorgefertigten Binärdateien funktioniert. (OK, Sie müssen ein komplexeres Kennwort eingeben, um die Anforderungen an die Windows-Kennwortkomplexität zu erfüllen.)

Danke, dass du @StefanScherer ausprobiert hast. Das Klartext-Passwort ist der einzige Teil, den ich hier nicht mag (ich mag Ihren Pass-Ansatz). Wir können später zu einer zertifikatbasierten Authentifizierung wechseln. Leider unterstützt die Packerbibliothek das noch nicht.

@ppadala Und was noch fantastischer ist, ist, dass eine Docker-Maschine rm -f vhost-win-test ALLES aufräumt - ich hatte so viele Probleme, alle Teile einer VM zu bereinigen, die mit "deploy to azure" erstellt wurden, und immer ein "verpasst" Bereitstellung von Azure-Schaltfläche aufheben 😄

Das Guthaben geht an @ahmetalpbalkan für den Wechsel zu Azure ARM und das Schreiben einer sauberen "Bereinigung".

@ppadala das ist verdammt erstaunlich. Gute Arbeit! Ich denke, die Frage wird jetzt sein, wie dies kurzfristig mit dem Azure-Treiber und langfristig mit anderen Treibern (wie Google / AWS) zusammengeführt werden kann.

@ahmetalpbalkan Die Pull-Anfrage # 3329 ist bereits mit dem Master synchronisiert und mit dem Azure-Treiber zusammengeführt. abgeben können. Derzeit verfügt nur Azure über Windows Server 2016-VMs. Der Code ist jedoch so geschrieben, dass GCP, AWS, vSphere und andere problemlos unterstützt werden.

Derzeit verfügt nur Azure über Windows Server 2016-VMs. Der Code ist jedoch so geschrieben, dass GCP, AWS, vSphere und andere problemlos unterstützt werden.

  • @ppadala
    Bedeutet dies, dass die Unterstützung lokaler VM-Anbieter in Sicht ist?

@ppadala @srounce Ich würde sagen, jemand sollte sich die Ausführungsfunktionen von WinRM und Startup Script von AWS / GCE / anderen APIs ansehen, um herauszufinden, ob die Funktionalität mit minimalen Änderungen auf andere Treiber portiert werden kann.

@ppadala @ahmetalpbalkan Könnte der Azure- Treiber der Docker-Maschine mit AzureStack verwendet werden ?

@nilleb Ich fürchte noch nicht. Wenn Sie es brauchen, öffnen Sie bitte eine separate Ausgabe.

Ich habe gerade das Docker für Windows heruntergeladen, das den 1.12 RC2 mit dem 0.8.0-rc1 hat, aber wenn ich die Option "azure-os" "windows" versuche, scheint es nicht zu funktionieren. Bitte lassen Sie mich wissen, wo ich eine Docker-Computer-Version erwerben kann, mit der TP5 Windows 2016 Docker-Hosts in Azure erstellt werden können.

Vielen Dank,

@ SharadGumaste Was ist der Fehler, wenn Sie sagen "es funktioniert nicht"? Haben Sie versucht, das Bild mit --azure-image anzugeben?

Ich habe gerade das Docker für Windows heruntergeladen, das den 1.12 RC2 mit dem 0.8.0-rc1 hat, aber wenn ich die Option "azure-os" "windows" versuche, scheint es nicht zu funktionieren. Bitte lassen Sie mich wissen, wo ich eine Docker-Computer-Version erwerben kann, mit der TP5 Windows 2016 Docker-Hosts in Azure erstellt werden können.

@ SharadGumaste Ich

Pradeep, ja, ich habe das Update von der Docker-Software gemacht. Was ist das Beste
Weg, um Binärdateien Ihrer Arbeit zu bekommen? Ich bin sehr nahe daran, eine Demo für a zu machen
Client von uns, außer ich kann keinen Barebone-Windows-Server erstellen und installieren
Docker Host verwandte Sachen von Grund auf neu und fügen Sie diese Maschine in
Docker-Maschine und erstellen und bereitstellen von Visual Studio.
Ich stecke bei TLS-Zertifikaten usw. fest ...

Vielen Dank im Voraus für jede Hilfe.

Am Donnerstag, 23. Juni 2016, schrieb Pradeep Padala [email protected] :

Ich habe gerade den Docker für Windows heruntergeladen, der die 1.12 RC2 hat, die
hat die 0.8.0-rc1, aber wenn ich die "azure-os" "Windows" -Option versuche, tut es
scheint nicht zu funktionieren. Bitte lassen Sie mich wissen, wo ich eine Docker-Maschine erwerben könnte
Version, die Docker-Hosts für TP5 Windows 2016 in Azure erstellen kann.

@ SharadGumaste https://github.com/SharadGumaste Ich vermute, Sie waren
versuchen Sie die veröffentlichte Version. Der Patch zur Unterstützung von Windows (Azure-OS
Windows-Option) ist noch nicht zusammengeführt.

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/docker/machine/issues/2907#issuecomment -228218888,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe/AH3YqqQLlXWUnSdw4i2TzsqXa4gHmTVYks5qOxt1gaJpZM4HKwbT
.

"A common mistake people make when trying to design something

Völlig narrensicher ist es, den Einfallsreichtum vollständiger Narren zu unterschätzen. "

– Douglas Adams, author (1952 – 2001)

@ SharadGumaste können Sie eine Mail an [email protected] senden? Ich habe ein separates Repo für Docker-Maschine für Windows, ich kann Ihnen Anweisungen zum Einrichten senden.

Gibt es Neuigkeiten zum Hochfahren eines Windows Docker-Hosts in einer lokalen VirtualBox?

Hat jemand einen Prototyp, der Windows-VMs in Azure hochfahren kann?

@djanosik Ich arbeite daran, Docker-Maschine dazu zu bringen, Windows OpenStack- und EC2-Instanzen für meine GitLab CI-Builds habe die PR-Abteilung von @ppadala übernommen, sie auf den neuesten Master gebracht und studiere sie jetzt. Es befindet sich unter https://github.com/davidarcher/machine/tree/azure_winrm .

Ich habe die Anweisungen von @ jen20 befolgt , um ein Windows AMI mit SSH zu erstellen. Es funktioniert mit Docker Machine bis zur Bereitstellung, wo es fehlschlägt, weil keine /etc/os-release -Datei vorhanden ist. Können wir jetzt, da SSH unter Windows verfügbar ist (mit einigem Aufwand), einen SSH-basierten Docker Machine Provisioner für Windows erhalten?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen