Dev Container in der WSL ohne Docker Desktop
Vorbereitung
Info: Diese Anleitung gilt nur für Windows 11 und der WSL in Version 0.67.6 oder höher. Ich habe dieses Vorgehen mit Ubuntu als auch Debian als WSL Distribution getestet.
Visual Studio Code, die Remote Erweiterung und die Dev Container Erweiterung muss unter Windows bereits installiert sein.
Wir starten mit einer neuen und blanken Ubuntu WSL:
wsl --install Ubuntu
Der Modus für die Linux Distribution in der WSL muss auf Version 2 gestellt sein, sonst wird Docker nicht funktionieren.
Eine Übersicht der vorhandenen Distributionen und deren Version erhält man mit:
wsl --list --all --verbose
Mit folgendem Befehl kann dieser Modus gesetzt werden:
wsl --set-version Ubuntu 2
In Ubuntu muss noch ein Nutzer mitsamt Kennwort angelegt werden.
Um dann noch sicher zu stellen, dass alles auf dem aktuellen Stand ist:
sudo apt-get -y update && sudo apt-get -y clean && sudo apt-get -y upgrade && sudo apt-get -y autoremove --purge
Jetzt sollte alles soweit vorbereitet sein und wir kommen zum eigentlichen.
Docker installieren
Im Groben folgen wir der Anleitung von Docker selbs:
https://docs.docker.com/engine/install/ubuntu/
Nicht immer nötig, aber es kann sicher nicht schaden alle vorherigen Docker Versionen zu entfernen:
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
Um die Sache einfach zu halten kann die Installation auch mit den "convenience scripts" durchgeführt werden:
Info: Unter Debian kann es sein, dass
curl
nicht installiert ist. Dies kann man mitsudo apt install curl
beheben.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh
Info: Um zu prüfen was das Skript machen wird kann man es auch mit
sudo sh ./get-docker.sh --dry-run
ausführen. Dabei werden keine Änderungen am System vorgenommen.
Docker sollte jetzt installiert sein aber es sind noch ein par Kleinigkeiten zu erledigen.
Nacharbeiten
Es kann vorkommen, dass die Gruppe docker
nicht angelegt wurde. Dies gilt es zu beheben:
sudo groupadd docker
Jetzt fehlt nur noch den eigenen Nutzer zu dieser Gruppe hinzuzufügen:
sudo usermod -aG docker $USER
Um Docker lauffähig zu bekommen muss systemd
verfügbar sein. Dazu muss in der /etc/wsl.conf
folgender Inhalt vorhanden sein:
[boot]
systemd=true
Info: Zum bearbeiten der Datei:
sudo vi /etc/wsl.conf
ESC
i
. Den text einfügen. Zum Speichern:ESC
:wq
Enter
.
Um diese Änderungen zur Wirkung zu verhelfen muss die WSL neu gestartet werden. Dazu in einer belibigen Kommandozeile außerhalb der WSL diesen Befehl absetzen:
wsl --shutdown
Obacht: dadurch werden alle aktiven WSL Instanzen neu gestartet!
Ob Docker jetzt richtig funktioniert kann schnell überprüft werden:
docker version
Das Ergebnis sollte in Etwa so aussehen:
Client: Docker Engine - Community
Version: 24.0.4
API version: 1.43
Go version: go1.20.5
Git commit: 3713ee1
Built: Fri Jul 7 14:51:00 2023
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 24.0.4
API version: 1.43 (minimum version 1.12)
Go version: go1.20.5
Git commit: 4ffc614
Built: Fri Jul 7 14:51:00 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.21
GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8
runc:
Version: 1.1.7
GitCommit: v1.1.7-0-g860f061
docker-init:
Version: 0.19.0
GitCommit: de40ad0
DevContainer in der WSL nutzen
Zum Test legen wir in der WSL einen Ordner an und öffnen diesen in Visual Studio Code:
mkdir test
cd test/
code .
Dadurch wird, beim ersten Mal, der Visual Studio Code Server in der WSL Distro installiert. Daraufhin wird der Ordner in Visual Studio Code unter Windows geöffnet.
Info: Man kann auch den Ordner über Visual Studio Code und dessen Remote WSL Erweiterung öffnen.
Jetzt kann man einen neuen Dev Container anlegen: CTRL + SHIFT + P
-> "Add Dev Container Configuration Files".
Ist der Container angelegt fragt Visual Studio Code ob man diesen alsgleich öffnen möchte.
Hat bis hier alles funktioniert läd Docker die Images und der Dev Container wird geöffnet.
DevContainer aus Windows nutzen
Wine Kleinigkeit ist noch nötig um die Dev Container auch aus Windows heraus direkt nutzen zu können.
Folgende Einstellungen sollten in den Visual Studio Code Settings noch gesetzt werden:
Dev Containers: Execute In WSL
wird aktiviert.
Sollte man mehrere WSL Distros im Einsatz haben oder sicher gehen wollen, dass immer die richtige verwendet wird trägt man unter Dev Containers: Execute In WSLDistro
noch den Name der gewünschten Distro.
Man kann diese Werte auch wie folgt in die Konfiguration als json eintragen:
"dev.containers.executeInWSL": true
"dev.containers.executeInWSLDistro": "Debian"
Hat man das getan funktionieren die Kommandos für Dev Container auch in einem unter Windows gestartetem Visual Studio Code.
Quellen
Install docker using the convenience script
Linux post-installation steps for Docker Engine
Running Docker on WSL2 without Docker Desktop (the right way)