Docker auf Windows installieren ohne Docker Desktop

Die DockerCLI und DockerEngine sind Freeware und OpenSource, im Business Bereich muss die Docker Desktop Anwendung erworben werden. Um Docker nutzen zu können, braucht man nicht unbedingt Docker Desktop. Auch wenn Docker Desktop einem bei der Einrichtung vieles einfacher macht. Hier soll eine Schritt für Schritt Anleitung folgen

Alle Schritte nutzen PowerShell oder meine Empfehlung „Windows Terminal Canary“

WSL (Windows-Subsystem für Linux )

Über WSL läuft eine Linux distro unter Windows.

hat man noch kein WSL installiert, kann über diesen Befehl eine Distro ausgewählt werden. Standard ist Ubuntu, ich nutze hier debian.
[crayon-67501be1081d9696052566/]
um WSL zu installieren gibt man folgenden Befehl ein
[crayon-67501be1081de202528682/]
Da das Linux System CPU und RAM Resourcen verbraucht, kann man diese einschränken. Dazu wird eine .wslconfig Datei im Userverzeichnis erstellt
[crayon-67501be1081e0224670489/]
In Windows Explorer %UserProfile% eingeben und die erstellte .wslconfig optional bearbeiten:
[crayon-67501be1081e1017370905/]
jetzt wsl eingeben und wir befinden uns in der Kommandozeile von Linux

Als erstes sollte man die distro aktualisieren
[crayon-67501be1081e2940192589/]

Optional: WSL Image verschieben

Es kann Sinnvoll sein, die WSL Images nicht im Standard Verzeichnis zu haben. Daher kann die WSL Image jederzeit umziehen.

  1. Name des WSL-Images bestimmen. In meinem Fall ist es „Debian“:
    [crayon-67501be1081e3004855565/]
  2. als tar exportieren:
    [crayon-67501be1081e5205449393/]
  3. In WSL das image lösen:
    [crayon-67501be1081e6888276673/]
  4. 2 Verzeichnisse erstellen. Mein neues Verzeichnis ist D:\Docker\wsl
    [crayon-67501be1081e7365789618/]
  5.  WSL herunterfahren:
    [crayon-67501be1081e8947655920/]
  6. Import starten: wsl –import Debian
    [crayon-67501be1081e9629089624/]
  7. Neues Image starten:
    [crayon-67501be1081ea906758595/]
  8. Optional:
    [crayon-67501be1081eb661350179/]

Docker installieren und einrichten

Zunächst werden benötigte Repositories für das Generieren von Zertifikaten installiert und dann docker selbst. Wichtig: Die Zeilen hier unten so wie die sind nacheinander, Zeile für Zeile kopieren. Nicht mehrere Zeilen miteinander in das Terminal einfügen. Aufforderungen mit Y und Enter bestätigen
[crayon-67501be1081ec185339731/]
[crayon-67501be1081ed814175859/]
Docker Daemon starten. Wenn der nicht weiter geht, Terminal schließen und neuen Terminal mit wsl starten
[crayon-67501be1081ee839180573/]
Docker müsste jetzt installiert sein. (optional) Das testen wir, indem wir ein hello-world container laufen lassen:
[crayon-67501be1081f0835175240/]
Damit unser aktueller User nicht immer sudo eingeben muss, können wir ihn zu der Gruppe der Docker Administratoren hinzufügen. Evtl. ist die Gruppe bereits vorhanden, dann Meldung ignorieren.
[crayon-67501be1081f1961415918/]

Um sicherzustellen, dass Docker bei jeden Neustart läuft, folgende Befehle ausführen:

[crayon-67501be1081f2052500789/]
Damit auch der dockerd nach dem Start läuft, muss man ein script einfügen. systemctl kann man mit WSL leider nicht nutzen.

Wir legen fest, dass wie sudo bei dem aktuellen Benutzer Benutzer gehandhabt werden soll. Nämlich soll für dockerd kein Passwort erfragt werden:
[crayon-67501be1081f3146974641/]
ganz unten folgendes hinzufügen und Benutzer gegeben falls anpassen:
[crayon-67501be1081f5823422468/]
Jetzt müssen wir die bash bearbeiten, damit nach reboot das Skript ausgeführt wird
[crayon-67501be1081f6574420244/]
mit „Bild runter“-Taste kann man bis ganz unten blättern und dort folgenden Code einfügen. Mit Strg+X, dann Y und Enter wieder raus:
[crayon-67501be1081f7583258738/]
Shell neustarten:
[crayon-67501be1081f8290763091/]
WSL beenden:
[crayon-67501be1081f9668377445/]
und WSL reboot:
[crayon-67501be1081fa722251223/]
Falls das nicht geht, kann ein Windows Job eingerichtet werden, der wsl automatisch bei Windows Start ausführt
[crayon-67501be1081fb789296205/]
Unter Aufgabenplanung in Windows diesen Task als „Unabhängig von der Benutzeranmeldung“ konfigurieren. Sonst funktioniert dieser Task nicht

Linux Docker, Windows bekannt machen

Docker läuft nun auf unserer WSL Linux Maschine. Das nützt uns wenig, da wir in PowerShell nicht immer auf die WSL Linux Maschine zugreifen wollen. Wir wollen einfach docker eingeben und damit die docker Instanz auf der Linux Maschine meinen. Daher erstellen wir jetzt die Brücke.

Zuerst müssen wir das in Linux erlauben. Folgender Befehl öffnet einen Editor:
[crayon-67501be1081fc355832669/]
dort mit Strg+V folgendes einfügen:
[crayon-67501be1081fd360177320/]
Mit Strg+X , dann Y und Enter speichern

Mit exit beenden wir die WSL Kommandozeile

Jetzt muss unter Windows eine Umgebungsvariable für diesen Docker Host angelegt werden (Terminal muss als Admin laufen):
[crayon-67501be1081fe406997499/]

Docker CLI unter Windows installieren

Wenn man bereits choco nutzt, geht das easy mit

[crayon-67501be1081ff045300510/]
Ansonsten hier herunterladen:

https://download.docker.com/win/static/stable/x86_64/

und unter einem Verzeichnis z.B. C:\DockerCli ablegen. Nun muss dieses Verzeichnis in den Umgebungsvariablen unter Path eingetragen werden

über folgenden Befehl müsste Docker nun aufrufbar sein
[crayon-67501be108201779144045/]

Man muss jetzt wissen, dass es nun 3 Ebenen gibt.

Windows -> WSL Linux -> Docker Container.

WSL hat für Windows automatisch ein mount in dem Ordner /mnt/ eingerichtet

Möchte man nun, dass der Container auf das Windows Verzeichnis C:\Temp bindet, so muss man stattdessen /mnt/c/Temp eingeben

Referenz:

Docker and WSL2 without Docker Desktop | by Romain Bruyère | Medium

files folders – Change the storage location of a WSL2 – Super User

How to automatically start the Docker daemon on WSL2 – NillsF blog

Portainer installieren mit SSL Zertifikat

Portainer über docker installieren
[crayon-67501be108202276287517/]
! Funktioniert noch nicht. Das Zertifikat wird vom Browser nicht anerkannt !

Zertifikat auf der Linux WSL erzeugen und das Zertifikat nach D:\Docker kopieren:
[crayon-67501be108203402669102/]