Festplattenspeicherleistung verbessern
Die Erweiterung Dev Containers verwendet standardmäßig "Bind-Mounts", um Quellcode aus Ihrem lokalen Dateisystem zu beziehen. Dies ist zwar die einfachste Option, aber unter macOS und Windows können Sie möglicherweise eine langsamere Festplattenspeicherleistung feststellen, wenn Sie Befehle wie yarn install aus dem Container heraus ausführen. Es gibt einige Dinge, die Sie tun können, um diese Art von Problemen zu beheben.
Speichern Sie Ihren Quellcode im WSL 2-Dateisystem unter Windows
Windows 10 2004 und höher enthält eine verbesserte Version des Windows Subsystem for Linux (WSL 2), die einen vollständigen Linux-Kernel bietet und eine deutlich verbesserte Leistung gegenüber WSL 1 aufweist. Docker Desktop 2.3+ enthält eine neue WSL 2-Engine, die Docker in WSL anstelle einer VM ausführt. Wenn Sie Ihren Quellcode daher im WSL 2-Dateisystem speichern, erhalten Sie eine verbesserte Leistung und eine bessere Kompatibilität für Dinge wie die Festlegung von Berechtigungen.
Weitere Informationen zur Verwendung dieser neuen Engine von VS Code finden Sie unter Ordner in einem WSL 2-Container unter Windows öffnen.
Video: Dev Containers unter Windows beschleunigen
Repository im Container-Volume klonen
Der Befehl Dev Containers: Repository im Container-Volume klonen... verwendet ein isoliertes, lokales Docker-benanntes Volume anstelle einer Bindung an das lokale Dateisystem. Neben der Vermeidung von überflüssigen Dateien im Dateibaum bieten lokale Volumes den zusätzlichen Vorteil einer verbesserten Leistung unter Windows und macOS.
Weitere Informationen zur Verwendung dieses Ansatzes finden Sie unter Git-Repository oder GitHub PR in einem isolierten Container-Volume öffnen.
In den nächsten beiden Abschnitten wird erläutert, wie ein benanntes Volume in anderen Szenarien verwendet wird.
Verwenden Sie ein gezieltes benanntes Volume
Da macOS und Windows Container in einer VM ausführen, sind "Bind"-Mounts nicht so schnell wie die direkte Verwendung des Dateisystems des Containers. Glücklicherweise hat Docker das Konzept eines lokalen "benannten Volumes", das wie das Dateisystem des Containers funktionieren kann, aber Container-Neuerstellungen überlebt. Dies macht es ideal für die Speicherung von Paketordnern wie node_modules, Datenordnern oder Ausgabeordnern wie build, bei denen die Schreibgeschwindigkeit entscheidend ist. Befolgen Sie die entsprechenden Schritte unten, je nachdem, was Sie in devcontainer.json referenzieren.
Dockerfile oder Image:
Wir verwenden das Repository vscode-remote-try-node, um zu veranschaulichen, wie yarn install beschleunigt werden kann.
Befolgen Sie diese Schritte:
-
Verwenden Sie die Eigenschaft
workspaceMountindevcontainer.json, um VS Code mitzuteilen, wo Ihr Quellcode gebunden werden soll. Verwenden Sie dann die Eigenschaftmounts(VS Code 1.41+), um den Unterordnernode_modulesstattdessen in ein lokales benanntes Volume zu mounten."mounts": [ "source=${localWorkspaceFolderBasename}-node_modules,target=${containerWorkspaceFolder}/node_modules,type=volume" ]Hinweis: Sie können
${localWorkspaceFolderBasename},${devcontainerId}oder einen hartkodierten Namen insourceverwenden. -
Da dieses Repository VS Code als nicht-Root-Benutzer "node" ausführt, müssen wir einen
postCreateCommandhinzufügen, um sicherzustellen, dass der Benutzer Zugriff auf den Ordner hat."remoteUser": "node", "mounts": [ "source=${localWorkspaceFolderBasename}-node_modules,target=${containerWorkspaceFolder}/node_modules,type=volume" ], "postCreateCommand": "sudo chown node node_modules"Dieser zweite Schritt ist nicht erforderlich, wenn Sie im Container als
rootausgeführt werden.
Wenn Sie den Container bereits erstellt und eine Verbindung dazu hergestellt haben, führen Sie Dev Containers: Container neu erstellen aus der Befehlspalette (F1) aus, um die Änderung zu übernehmen. Andernfalls führen Sie Dev Containers: Ordner im Container öffnen... aus, um eine Verbindung zum Container herzustellen.
Zwei Hinweise zu diesem Ansatz
-
Wenn Sie den Ordner
node_modulesim Container löschen, kann die Verbindung zum Volume verloren gehen. Löschen Sie stattdessen den Inhalt des Ordnersnode_modules, wenn er benötigt wird (rm -rf node_modules/* node_modules/.*). -
Sie werden feststellen, dass mit dieser Methode lokal ein leerer Ordner
node_moduleserstellt wird. Dies liegt daran, dass sich der Volume-Mountpunkt im Container innerhalb des lokalen Dateisystem-Bind-Mounts befindet. Dies ist erwartet und harmlos.
Docker Compose:
Obwohl vscode-remote-try-node kein Docker Compose verwendet, sind die Schritte ähnlich, aber die Volume-Mount-Konfiguration befindet sich in einer anderen Datei.
-
Fügen Sie in Ihrer Docker Compose-Datei (oder einer erweiterten) einen lokalen benannten Volume-Mount für den Unterordner
node_modulesfür die entsprechenden Dienste hinzu. Zum Beispielversion: '3' services: your-service-name-here: volumes: # Or wherever you've mounted your source code - .:/workspace:cached - try-node-node_modules:/workspace/node_modules # ... volumes: try-node-node_modules: -
Stellen Sie als Nächstes sicher, dass die Eigenschaft
workspaceFolderindevcontainer.jsonmit dem Ort übereinstimmt, an dem Ihr tatsächlicher Quellcode gemountet ist."workspaceFolder": "/workspace" -
Wenn Sie im Container mit einem anderen Benutzer als root laufen (siehe Benutzer außer root), fügen Sie einen
postCreateCommandhinzu, um den Besitzer des gemounteten Ordners zu aktualisieren, da er möglicherweise als root gemountet wurde. Ersetzen Sieuser-name-goes-heredurch den entsprechenden Benutzer."remoteUser": "node", "workspaceFolder": "/workspace", "postCreateCommand": "sudo chown user-name-goes-here node_modules"
Wenn Sie den Container bereits erstellt und eine Verbindung dazu hergestellt haben, führen Sie Dev Containers: Container neu erstellen aus der Befehlspalette (F1) aus, um die Änderung zu übernehmen. Andernfalls führen Sie Dev Containers: Ordner im Container öffnen... aus, um eine Verbindung zum Container herzustellen.
Video: npm install in einem Dev-Container beschleunigen
Verwenden Sie ein benanntes Volume für Ihren gesamten Quellbaum
Schließlich, wenn keine der oben genannten Optionen Ihren Anforderungen entspricht, können Sie noch einen Schritt weiter gehen und Ihren gesamten Quellbaum innerhalb eines benannten Volumes klonen, anstatt lokal. Sie können ein benanntes Volume einrichten, indem Sie eine vorhandene devcontainer.json-Konfiguration nehmen und diese wie folgt ändern (aktualisieren Sie your-volume-name-here mit dem gewünschten Namen des Volumes).
Abhängig davon, was Sie in devcontainer.json referenzieren
-
Dockerfile oder Image: Verwenden Sie die folgenden Eigenschaften in
devcontainer.json, um ein lokales benanntes Volume in den Container zu mounten."workspaceMount": "source=your-volume-name-here,target=/workspace,type=volume" "workspaceFolder": "/workspace", -
Docker Compose: Aktualisieren Sie (oder erweitern Sie) Ihre
docker-compose.ymlmit dem Folgenden für die entsprechenden Dienste.version: '3' services: your-service-name-here: volumes: - your-volume-name-here:/workspace # ... volumes: your-volume-name-here:Stellen Sie außerdem sicher, dass die Eigenschaft
workspaceFolderindevcontainer.jsonmit dem Ort übereinstimmt, an dem das Volume gemountet ist (oder einem Unterordner innerhalb des Volumes)."workspaceFolder": "/workspace"
Wenn Sie den Container bereits erstellt und eine Verbindung dazu hergestellt haben, führen Sie Dev Containers: Container neu erstellen aus der Befehlspalette (F1) aus, um die Änderung zu übernehmen. Andernfalls führen Sie Dev Containers: Ordner im Container öffnen... aus, um eine Verbindung zum Container herzustellen.
Verwenden Sie als Nächstes entweder den Befehl Git: Klonen aus der Befehlspalette oder starten Sie ein integriertes Terminal (⌃⇧` (Windows, Linux Ctrl+Shift+`)) und verwenden Sie den Befehl git clone, um Ihren Quellcode in den Ordner /workspace zu klonen.
Schließlich verwenden Sie den Befehl Datei > Öffnen... / Ordner öffnen..., um das geklonte Repository im Container zu öffnen.