Können Sie Docker nativ auf dem neuen Windows 10 (Ubuntu) Bash-Benutzerbereich ausführen?

Mein Verständnis war, dass die primäre Einschränkung beim Ausführen von Docker auf anderen Betriebssystemen die Linux-Netzwerkcontainer waren, die dies ermöglichten. (Sicherlich für Macs).

Kurzem Microsoft hat angekündigt eine Beta von a Ubuntu Linux Benutzermodus läuft nativ unter Windows 10. Dies kann Binärdateien ausführen, die im ELF-Format unter Windows kompiliert wurden (im Gegensatz zu Cygwin, für das eine Kompilierung erforderlich ist.)

Meine Frage ist: Können Sie Docker nativ auf dem neuen Windows 10 (Ubuntu) Bash-Benutzerbereich ausführen?

Sie können Docker Desktop für Windows als Engine und Docker für Linux als Client in WSL unter Ubuntu / Debian unter Windows verwenden. Verbinden Sie sie über TCP.

Installieren Sie Docker Desktop für Windows: https://hub.docker.com/editions/community/docker-ce-desktop-windowsWenn Sie Windows-Container anstelle von Linux-Containern verwenden möchten, können beide Typcontainer vom Linux-Docker-Client im Bash-Benutzerbereich verwaltet werden.

Seit Version 17.03.1-ce-win12 (12058) müssen Sie überprüfen Daemon auf tcp: // localhost: 2375 ohne TLS verfügbar machen damit der Linux-Docker-Client weiterhin über TCP mit dem Windows-Docker-Daemon kommunizieren kann

Folgendermaßen:

cdwget https://download.docker.com/linux/static/stable/`uname -m`/docker-19.03.1.tgztar -xzvf docker-*.tgzcd docker./docker -H tcp://0.0.0.0:2375 ps

oder

env DOCKER_HOST=tcp://0.0.0.0:2375 ./docker ps

Um es dauerhaft zu machen:

mkdir ~/binmv ~/docker/docker ~/bin

Fügen Sie die entsprechenden Variablen hinzu .bashrc

export DOCKER_HOST=tcp://0.0.0.0:2375export PATH=$PATH:~/bin

Natürlich können Sie docker-compose installieren

sudo -icurl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose

Oder mit Python pip

sudo apt-get install python-pip bash-completionsudo pip install docker-compose

Und Bash-Vervollständigung. Der beste Teil:

sudo -iapt-get install bash-completioncurl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker > /etc/bash_completion.d/dockercurl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

Ich habe es mit der Version 2.1.0.1 (37199) von Docker Desktop mit Hyper-V getestet:

$ docker versionClient: Docker Engine - Community Version:           19.03.1 API version:       1.40 Go version:        go1.12.5 Git commit:        74b1e89e8a Built:             Thu Jul 25 21:17:37 2019 OS/Arch:           linux/amd64 Experimental:      falseServer: Docker Engine - Community Engine:  Version:          19.03.1  API version:      1.40 (minimum version 1.12)  Go version:       go1.12.5  Git commit:       74b1e89  Built:            Thu Jul 25 21:17:52 2019  OS/Arch:          linux/amd64  Experimental:     false containerd:  Version:          v1.2.6  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb runc:  Version:          1.0.0-rc8  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f docker-init:  Version:          0.18.0  GitCommit:        fec3683Look both client and server say **OS/Arch: linux/amd64**

Datenmengen

Seien Sie vorsichtig, wenn Sie Volumes hinzufügen. Pfad C:\dir wird sichtbar als /mnt/c/dir auf WSL und as /c/dir/ von der Docker-Engine. Sie können es dauerhaft überwinden:

sudo bash -c "echo -e '[automount] \nroot = /'>/etc/wsl.conf"

Sie müssen WSL beenden und neu laden, nachdem Sie die Änderung an wsl vorgenommen haben.conf, damit WSL Ihre Änderungen beim Start einliest.

UPDATE

von: Was ist neu für die Befehlszeile in Windows 10 Version 1803

Unix-Sockets Unix-Sockets wurden unter Windows nicht unterstützt, und jetzt sind sie es! Sie können auch über Unix-Sockets zwischen Windows und WSL kommunizieren. Eines der großartigen Dinge daran ist, dass WSL den Linux-Docker-Client ausführen kann, um mit dem unter Windows ausgeführten Docker-Daemon zu interagieren.

UPDATE

Dieses Skript und die Verwendung von Unix-Sockets wurden in Pengwin's pengwin-Setup.

Bezug

Ab sofort (April 2016) lautet die Antwort:

Wir wissen es noch nicht (aber wahrscheinlich nicht).

Tatsache

  • Windows 10 kann jetzt eine Vielzahl von Linux-Programmen ausführen (darunter die Bash-Shell und verschiedene Textdienstprogramme). Dies sind keine Ports (dh neu kompilierte Versionen, wie zum Beispiel in Cygwin), sie sind die gleichen ELF-Binärdateien das läuft auf einem typischen Linux-System. In diesem Fall wurden sie von Ubuntu übernommen.
  • Um dies zu ermöglichen, wurde Windows 10 so modifiziert, dass es Linux-Systemaufrufe (Syscalls) akzeptiert und ELF-Binärdateien laden und ausführen kann.kommentar von Scott Hanselman). Dies bedeutet, dass unveränderte ausführbare Linux-Dateien ausgeführt werden können, ihre unveränderten gemeinsam genutzten Bibliotheken nach Bedarf geladen werden und Windows sie als Windows-Prozesse ausführt.
  • Wann immer ein solches Linux-Programm mit dem Kernel interagieren möchte, gibt es einen Systemaufruf aus (oder lässt es eine Bibliothek tun). Dies ist (vermutlich) der einzige Unterschied zur Ausführung unter Linux: Unter Linux übernimmt der Linux-Kernel diese Aufrufe; Unter Windows 10 erledigt dies stattdessen der Windows 10-Kernel.

Spekulation

Die Frage ist also, ob die von Docker benötigten Systemaufrufe (unter anderem für Chroot und Namespaces) implementiert wurden oder nicht. Die Antwort darauf ist wahrscheinlich "Nein". Docker erfordert ziemlich ausgefeilte (und Linux-spezifische) Funktionen für die Prozess- und Ressourcenverwaltung sowie die Prozessisolierung. Während es wahrscheinlich möglich ist, all dies unter Windows zu replizieren, wäre es eine Menge Arbeit, und da das Ziel dieser Windows-Funktion darin zu bestehen scheint, Linux-Benutzerbereichsprogramme auszuführen, ist es unwahrscheinlich, dass sie die ganze Arbeit geleistet haben (und hielt es geheim).

Es gibt jedoch keine definitiven Informationen, soweit ich das beurteilen kann.

Vorhandene Docker-Ports

Natürlich, wenn Microsoft entscheidet, dass sie Docker-Unterstützung in Windows 10 wünschen, werden sie es wahrscheinlich anbieten können. Es gibt einen Präzedenzfall für die Portierung von Docker auf einen anderen Kernel:

  • Es gibt eine Docker-Portierung für FreeBSD. Es ist als "experimentell" gekennzeichnet, scheint aber im Prinzip zu funktionieren. Es kann unveränderte Docker-Container aus dem Docker-Repository verwenden, was bedeutet, dass es tatsächlich eine Linux-ähnliche Hostumgebung für die Images bereitstellt.
  • Es läuft ein Projekt zur Portierung von Docker auf Windows (insbesondere Windows Server 2016) - siehe dazu Docker Blogeintrag ab August 2015. Im Gegensatz zum obigen FreBSD-Port wird dies jedoch ein Port sein, der es Docker ermöglicht, Windows-Images unter Windows auszuführen, nicht Linux-Images unter Windows. Danke an Rory McCune für den Hinweis.

Nein, das ist nicht möglich.

Docker benötigt mehrere Dinge, um Container auszuführen:

  • chroot
  • Namensräume für:
    • PID
    • Internetnutzer
    • Netzwerk
    • Mount
    • BRUCHFESTIGKEIT
    • IPCS

Dies sind alles Kernelfunktionen, die in Linux implementiert sind. Leider verfügen die meisten von ihnen nicht über eine ähnliche Funktion in Windows, die sie als Ersatz verwenden können (noch im Linux-Subsystem, das Microsoft im Windows-Kernel implementiert hat). All dies muss vom Betriebssystem bereitgestellt werden.

Die erste Insider-Vorschau wurde gestern veröffentlicht. Ich habe versucht, Docker zu installieren, aber es schlägt mit folgendem fehl:

Es scheint also, dass es für die erste Vorschau derzeit nicht funktioniert. Wie viele Leute jedoch spekuliert haben, könnte es in einer zukünftigen Version funktionieren.

Ab dem Ersteller-Update (veröffentlicht am 13. Juni 2017) Sie können native ausführbare Windows-Dateien direkt in WSL ausführen. Dies bedeutet, wenn Sie bereits installiert haben Docker für Windows sie können einfach das aufrufen docker installierte Binärdateien unter C:\Program Files. Da sie enden in .exe am einfachsten ist es, Aliase zu erstellen. So etwas wie das Folgende in deinem .bashrc sollte funktionieren:

DOCKER_BIN='/mnt/c/Program Files/Docker/Docker/resources/bin'for f in "$DOCKER_BIN"/*; do  alias "$(basename "$f" | sed 's/.exe$//')"'="'"$f"'"'done

Dadurch werden Aliase für alle Dateien in der DOCKER_BIN Verzeichnis:

$ type dockerdocker is aliased to `"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'$ docker --versionDocker version 17.03.1-ce, build c6d412e

Eine Einschränkung: Sie erhalten eine Fehlermeldung wie "Aktuelles Arbeitsverzeichnis kann nicht übersetzt werden" wenn aus einem Linux-Verzeichnis ausgeführt. Nur cd in ein Windows-Verzeichnis (z. /mnt/c/Users/YourUsername) und du solltest gut sein.

Sobald Docker 1.12 veröffentlicht und der Linux-Docker-Client getrennt ist, sollten Sie in der Lage sein, den Docker auszuführen Client in Windows 10 bash.

Dies klingt vielleicht nicht nach viel, wenn Sie einen Docker-Windows-Client haben, aber es ist nützlich, wenn Sie Linux-Toolchains haben, die Docker für die clientseitige Funktionalität enthalten.

In Windows 10 Version 1607 Build 1493.10 können Sie es erfolgreich auf Ubuntu Bash installieren, aber es funktioniert nicht :(

Eine einfache "Docker-Version" wird es Ihnen sagen:

Client version: 1.6.2Client API version: 1.18Go version (client): go1.2.1Git commit (client): 7c8fca2OS/Arch (client): linux/amd64FATA[0000] Get http:///var/run/docker.sock/v1.18/version: dial unix /var/run/docker.sock: setsockopt: invalid argument. Are you trying to connect to a TLS-enabled daemon without TLS?

Wenn Sie dann "sudo docker -d" ausführen, erhalten Sie die folgende Fehlermeldung:

FATA[0000] ERROR: You are running Linux kernel version 3.4.0+, which is unsupported for running Docker. Please upgrade your kernel to 3.8+.

Das ist also definitiv ein Stopper von der Bash-Seite.

Trotzdem können Sie installieren Docker für Windows und es funktioniert wie ein Zauber, Sie können natürlich Linux-Server und alles, was Sie brauchen, bereitstellen.

> docker versionClient: Version:      1.12.0 API version:  1.24 Go version:   go1.6.3 Git commit:   8eab29e Built:        Thu Jul 28 21:15:28 2016 OS/Arch:      windows/amd64Server: Version:      1.12.0 API version:  1.24 Go version:   go1.6.3 Git commit:   8eab29e Built:        Thu Jul 28 21:15:28 2016 OS/Arch:      linux/amd64

Stand September 2016, Nein.

Alle aktuellen Implementierungen von Docker unter Windows verwenden Virtualisierung, Docker 1.12 verwendet einen Hypervisor unter Windows - wodurch der Vorteil der Containerisierung gegenüber der Virtualisierung aufgehoben wird.

Docker benötigt mehr als nur Linux-Systemaufrufe.

Es benötigt Prozesskontrollgruppen (Cgroups), ein stapelbares Dateisystem (aufs) sowie andere Linux-basierte Systeme außerhalb des Kernels.

Weder cgroups noch aufs sind nativ im Windows 10-Kernel enthalten.

Hier gibt es eine Implementierung von Windows Server 2016: https://msdn.microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server ..dies führt jedoch nur einige Windows-Dienste aus, z. B. IIS und nicht Ubuntu

Docker funktioniert derzeit im aktuellen Build (14316) nicht - vorausgesetzt, Sie können es installieren.

root@localhost:~# docker --helpruntime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000fatal error: runtime: address space conflict

Von: https://blog.docker.com/2016/07/docker-for-mac-and-windows-production-ready/

Faster and more reliable – native development environment usinghypervisors built into each operating system. (No more VirtualBox!)

Es ist nicht “nur” ein “Bash” -Benutzerbereich. Es ist ein echter, ziemlich vollständiger Linux-Benutzerbereich, aber ohne X-Fenster, dh nur Text. “bash” zu sagen, kommuniziert die Nur-Text-Einschränkung recht gut…

in der Tat ist dies der Zweck des nativen Windows-Dockers. Die Natur der Containerisierung besteht darin, dass Sie keine Systeme mit anderen Kerneln ausführen können, ohne eine Virtualisierung oder (möglicherweise) dieses neue Subsystem, das Microsoft entwickelt, hinzuzufügen

Ich denke, es wird nicht klar sein, bis sie dies veröffentlichen (AFAIK, es ist noch nicht einmal für Windows-Insider verfügbar), aber es ist erwähnenswert, dass Microsoft und Docker daran arbeiten, Docker nativ auf Windows zu bringen, um zusammen mit Windows Server 2016 veröffentlicht zu werden

@RoryMcCune: Interessant. Laut [diesem Docker-Blogeintrag] (https://blog.docker.com/2015/08/tp-docker-engine-windows-server-2016 /) ab August 2015 wird dies ein Port sein, der es Docker ermöglicht, Windows-Images unter Windows auszuführen, nicht Linux-Images unter Windows.

Für ein GNU-System ist es sicherlich möglich, auf einem Windows-Kernel zu laufen. Es wäre eine Menge Arbeit für eine sehr laterale Verschiebung der Qualität. Ich wäre überrascht, wenn es passieren würde oder wenn die Leute es annehmen würden.

Habe ich etwas verpasst? Ist das tatsächlich verteilt worden? Im Moment kenne ich es nur als Vaporware.

Verwandt: [Docker-Fehler: / var / run / docker.socke: keine solche Datei oder Verzeichnis] (boot2docker - docker error: /var/run/docker.sock: no such file or directory - Stack Overflow ).

Ist es möglich, ein Windows Docker-Image auf einer Ubuntu aws-Instanz auszuführen? oder gibt es eine Alternative? …wurzel @ ip-172-31-22-20:~/ docker/windows# docker/ microsoft/nanoserver
Standard-Tag verwenden: neueste
neueste: Ziehen von Microsoft / nanoserver
bce2fbc256ea: fs-Schicht ziehen
4806a44e00a0: fs-Schicht ziehen
image Betriebssystem “Windows” kann auf dieser Plattform nicht verwendet werden
wurzel @ ip-172-31-22-20:~/ docker/windows#