ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

Verwendung von Dev Containern in WSL 2

1. Juli 2020 von Brigit Murtaugh, @BrigitMurtaugh

Durch die Nutzung der Leistung von Docker-Containern und dem Windows Subsystem für Linux 2 (WSL 2) können Sie Ihre Windows-Umgebung erhalten, indem Sie Ihre Anwendungen in der sandboxed Vertrautheit eines Containers mit einem tief integrierten Linux-Kernel entwickeln.

Der Mai brachte uns einige spannende Ankündigungen in der Welt der Virtualisierung: Das Windows 10 Mai 2020 Update fügte WSL 2 als Out-of-the-Box-Funktion hinzu, und Docker Desktop Stable 2.3.0.2 ging mit WSL 2 Backend-Unterstützung auf GA (General Availability).

In früheren Blogbeiträgen haben wir untersucht, wie man Docker in WSL 2 verwendet. Die erste Voraussetzung war die Installation von Windows Insiders, da die WSL 2-Unterstützung noch nicht Teil stabiler Windows-Releases war, und die nächste war die Installation einer Tech Preview von Docker WSL 2. Jetzt sind sowohl die Windows WSL 2- als auch die Docker-Unterstützung in stabilen GA-Releases enthalten!

In diesem Beitrag werden wir uns ansehen, wie beide Tools funktionieren und wie Sie sie in Visual Studio Code nutzen können, um Dev-Container in WSL 2 produktiv zu verwenden.

Neue Ära der Virtualisierung

Sowohl WSL 2 als auch die neueste Version von Docker Desktop ändern die Art und Weise, wie Virtualisierung funktioniert.

WSL 2

Wie in einem früheren Beitrag diskutiert, verfolgt WSL 2 einen neuen Ansatz für das Windows Subsystem for Linux, indem es einen echten Linux-Kernel innerhalb einer leichtgewichtigen virtuellen Maschine (VM) verwendet. Es wurde optimiert, um sich nahtlos und tief in Ihre Windows-Umgebung integriert anzufühlen, sodass Sie schnelle Startzeiten, einen geringen Ressourcenverbrauch und keinerlei VM-Konfigurations- oder Verwaltungsanforderungen haben.

Systemaufrufe ermöglichen es Ihnen, Funktionen wie den Zugriff auf Dateien, die Anforderung von Speicher und die Erstellung von Prozessen durchzuführen. Da WSL 2 einen vollständigen Linux-Kernel enthält, verfügt es über die volle Systemaufrufs-Kapazität, was bedeutet, dass Ihre Lieblingsanwendungen wie Docker vollständig und zuverlässig funktionieren.

Docker

In WSL 1 konnte die Docker Engine aufgrund grundlegender Unterschiede zwischen Windows und Linux nicht direkt innerhalb von WSL ausgeführt werden, und das Docker-Team entwickelte eine alternative Lösung unter Verwendung von Hyper-V-VMs und LinuxKit. Da WSL 2 nun über die volle Systemaufrufs-Kapazität verfügt, kann Docker jedoch vollständig in WSL 2 ausgeführt werden, was zu verstärkten Investitionen des Docker-Teams führte.

Die neue Mai 2020-Version von Docker Desktop kann Container viel schneller erstellen und weniger Ressourcen verbrauchen, da sie die dynamische Speicherzuweisung von WSL 2 nutzt. Der Kaltstart kann weniger als 10 Sekunden dauern, im Gegensatz zu fast einer Minute in der vorherigen Version. Darüber hinaus ist Hyper-V keine Voraussetzung mehr, sodass die in diesem Beitrag beschriebenen Schritte unter Windows 10 Home funktionieren.

Da WSL 2 unter Windows und Docker Desktop nun GA sind, können Sie Ihre Dev-Container in WSL 2 mit noch größerem Vertrauen nutzen.

Erste Schritte

Voraussetzungen

  • Installieren Sie Windows 10, Version 2004.
    • Um herauszufinden, welche Version von Windows auf Ihrem Gerät läuft, drücken Sie die Taste Windows-Logo + R, geben Sie winver in das Feld Öffnen ein und wählen Sie dann OK.
  • Installieren Sie Visual Studio Code.
  • Aktivieren Sie WSL 2, indem Sie der WSL 2 Installationsanleitung folgen.
  • Installieren Sie Ubuntu (oder Ihre bevorzugte Linux-Distribution) aus dem Microsoft Store.
  • Installieren Sie Docker Desktop Stable 2.3.0.2.

Nach der Installation erkennt Docker, dass Sie WSL installiert haben, und fordert Sie auf, die WSL-Integration zu aktivieren. Wählen Sie im Pop-up-Fenster WSL-Integration aktivieren.

Docker Desktop WSL integration dialog

Optional: Installieren Sie das neue Windows Terminal für das beste Erlebnis, einschließlich der Möglichkeit, neue PowerShell- und Ubuntu-Terminals in derselben Benutzeroberfläche zu öffnen.

VS Code in WSL 2 öffnen

Lassen Sie uns VS Code mit unserer WSL 2-Engine verbinden. Öffnen Sie ein Ubuntu-Terminal, navigieren Sie zu dem Quellcodeordner Ihrer Wahl und geben Sie code . ein. Dies startet eine Instanz von VS Code, die es Ihnen ermöglicht, WSL als Ihre vollständige Entwicklungsumgebung zu nutzen. Sie können sich auch über die Befehlspalette mit WSL verbinden. Ich werde eine einfache HelloNode-Anwendung öffnen

Launch code . from Ubuntu terminal

Sobald VS Code geöffnet ist, erkennt es, dass wir WSL installiert haben, und empfiehlt uns, die WSL Erweiterung zu installieren. Ich wähle Installieren.

WSL extension recommended

Nach der Installation der Erweiterung können wir VS Code neu laden, um eine Verbindung zu WSL 2 herzustellen.

Reload VS Code after installing extension

Nachdem wir neu geladen haben, können wir bestätigen, dass wir mit Ubuntu verbunden sind, indem wir den WSL-Indikator in der unteren linken Ecke des Fensters überprüfen.

WSL: Ubuntu bottom left indicator

Die Installation der WSL-Erweiterung hat den Remote Explorer zu VS Code hinzugefügt. Wenn wir im Explorer nachsehen, können wir Informationen über unsere Linux-Distributionen sehen.

Remote Explorer with WSL Targets

Arbeiten mit Containern

Wir können die Dev Containers-Erweiterung nutzen, um Container anzuzeigen und sich damit zu verbinden, zusätzlich zu einer Vielzahl anderer Szenarien, wie z. B.:

Diese Konfigurationen ermöglichen es Ihnen, dieselbe Entwicklungsumgebung einfach über verschiedene Maschinen hinweg zu reproduzieren, projektspezifische Tools und Erweiterungen in einen DevContainer zu installieren und in einer Umgebung zu entwickeln, die der für die Bereitstellung ähnelt, und dabei die lokale Maschine unverändert zu lassen. Wir können Container auch über die Docker-Erweiterung anzeigen und uns damit verbinden.

Während Sie beim Verwenden der WSL 2-Engine auf Quellcode sowohl aus Windows als auch aus dem WSL 2-Dateisystem zugreifen können, empfehlen wir die Verwendung des WSL 2-Dateisystems, da die Leistung wesentlich besser ist. Da die Leistung bei Verwendung des Dateisystems innerhalb von WSL 2 besser ist, werden wir nun durchgehen, wie Sie es verwenden.

Wir müssen den Ordner auswählen, den wir in einem Container öffnen möchten. Stellen Sie zunächst sicher, dass Sie die Dev Containers-Erweiterung installiert haben. Wir können dann den Befehl Dev Containers: Reopen in Container aus einem Ordner aufrufen, der bereits über die WSL Erweiterung geöffnet wurde.

Ich habe einen vorhandenen HelloNode-Ordner auf meinem WSL 2-Dateisystem mit meinem Node-Projekt darin. Ich werde auswählen: Dev Containers: Reopen in Container

Command Palette: Dev Containers: Reopen in Container

Eine Liste von Containerdefinitionen wird angezeigt, da sich noch keine DevContainer-Konfiguration im Repository befindet. Die Liste der angezeigten Container-Konfigurationsdefinitionen wird basierend auf meinem Projekttyp gefiltert. Ich wähle Node.js 14.

Command Palette: Node.js 14

Eine neue Instanz von VS Code wird geöffnet. VS Code beginnt mit dem Erstellen des Images und startet dann unseren Container.

VS Code instance starting with Dev Container

Unsere Anwendung verfügt nun über einen .devcontainer-Ordner, in dem die Container-Konfigurationsinformationen gespeichert sind. Um zu überprüfen, ob wir sowohl mit WSL als auch innerhalb eines Containers verbunden sind, öffnen wir das integrierte Terminal und überprüfen uname und die Node-Version.

Check uname and node -v

Wie wir sehen, gab unser uname Linux zurück, also sind wir immer noch mit der WSL 2-Engine verbunden, und node -v gab v14.4.0 zurück, also haben wir unseren Node 14-Container erfolgreich konfiguriert.

Lassen Sie uns versuchen, unsere App mit F5 auszuführen.

Local host running Hello World app

Erfolg!

Feedback & weiterführende Lektüre

Um Ihnen bei der Einrichtung von VS Code mit WSL und Containern zu helfen, haben wir detaillierte Artikel in der VS Code Remote Development Dokumentation. Wenn Sie Fragen oder Feedback für unser Team haben, zögern Sie bitte nicht, ein Problem im VS Code Remote Development GitHub Repository zu eröffnen oder uns auf Twitter unter @code zu kontaktieren.

Viel Spaß beim Programmieren!

Brigit Murtaugh, VS Code Program Manager @BrigitMurtaugh

© . This site is unofficial and not affiliated with Microsoft.