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.
1 |
wsl --list --online |
um WSL zu installieren gibt man folgenden Befehl ein
1 |
wsl --install --distribution <meineDistro> |
Da das Linux System CPU und RAM Resourcen verbraucht, kann man diese einschränken. Dazu wird eine .wslconfig Datei im Userverzeichnis erstellt
1 |
if (-not (Test-Path "$env:USERPROFILE\.wslconfig")) { New-Item -Path "$env:USERPROFILE\.wslconfig" -ItemType File -Force } else { Write-Host "The file '.wslconfig' already exists." } |
In Windows Explorer %UserProfile% eingeben und die erstellte .wslconfig optional bearbeiten:
1 2 3 |
[wsl2] memory=4GB processors=2 |
jetzt wsl eingeben und wir befinden uns in der Kommandozeile von Linux
Als erstes sollte man die distro aktualisieren
1 |
sudo apt update && sudo apt upgrade |
Optional: WSL Image verschieben
Es kann Sinnvoll sein, die WSL Images nicht im Standard Verzeichnis zu haben. Daher kann die WSL Image jederzeit umziehen.
- Name des WSL-Images bestimmen. In meinem Fall ist es „Debian“:
1wsl --list -v - als tar exportieren:
1wsl --export Debian D:\DebianBackup.tar - In WSL das image lösen:
1wsl --unregister Debian - 2 Verzeichnisse erstellen. Mein neues Verzeichnis ist D:\Docker\wsl
123mkdir "D:\Docker\wsl"mkdir "D:\Docker\wsl\images"mkdir "D:\Docker\wsl\instances\Debian" - WSL herunterfahren:
1wsl --shutdown - Import starten: wsl –import Debian
1D:\Docker\wsl "D:\DebianBackup.tar" --version 2 - Neues Image starten:
1wsl ~ -d Debian - Optional:
1234567891011121314151617ou next need to set the default username, since WSL doesn't "remember" it for --imported distributions. From inside the new Debian distro:sudo -e /etc/wsl.conf# Yes, you are already root, but `sudo -e` is just a fairly safe way to invoke the default editor regardless of distributionAdd the following:[user]default=<your_normal_username>Save and exit the editor.exit the shell/WSL.Back in the same PowerShell session (so all the variables are still intact):wsl --terminate $WSL_NEW_DISTRO_NAMEwsl --set-default $WSL_NEW_DISTRO_NAMEwsl ~
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
1 2 3 4 5 6 7 8 9 10 11 |
sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update |
1 |
<span id="f520" class="nz mo fq nw b bg oa ob l oc od" data-selectable-paragraph="">sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</span> |
Docker Daemon starten. Wenn der nicht weiter geht, Terminal schließen und neuen Terminal mit wsl starten
1 |
sudo dockerd |
Docker müsste jetzt installiert sein. (optional) Das testen wir, indem wir ein hello-world container laufen lassen:
1 |
sudo docker run hello-world |
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.
1 2 |
sudo groupadd docker sudo usermod -aG docker $USER |
Um sicherzustellen, dass Docker bei jeden Neustart läuft, folgende Befehle ausführen:
1 2 |
sudo systemctl enable docker.service sudo systemctl enable containerd.service |
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:
1 |
sudo visudo |
ganz unten folgendes hinzufügen und Benutzer gegeben falls anpassen:
1 2 3 4 5 |
# User kingside muss kein Passwort im Verzeichnis dockerd eingeben kingside ALL=(ALL) NOPASSWD: /usr/bin/dockerd # User root muss kein Passwort im Verzeichnis dockerd eingeben root ALL=(ALL) NOPASSWD: /usr/bin/dockerd |
Jetzt müssen wir die bash bearbeiten, damit nach reboot das Skript ausgeführt wird
1 |
nano ~/.bashrc |
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:
1 2 3 4 5 6 |
# Start Docker daemon automatically when logging in if not running. RUNNING=`ps aux | grep dockerd | grep -v grep` if [ -z "$RUNNING" ]; then sudo dockerd > /dev/null 2>&1 & disown fi |
Shell neustarten:
1 |
source ~/.bashrc |
WSL beenden:
1 |
exit |
und WSL reboot:
1 2 |
wsl --shutdown wsl |
Falls das nicht geht, kann ein Windows Job eingerichtet werden, der wsl automatisch bei Windows Start ausführt
1 |
schtasks /Create /TN "Start-WSL-OnStartup" /TR "wsl -d Debian sudo dockerd" /SC ONSTART /RL HIGHEST /F /RU SYSTEM /DELAY 0000:30 |
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:
1 |
sudo nano /etc/docker/daemon.json |
dort mit Strg+V folgendes einfügen:
1 2 3 |
{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] } |
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):
1 |
[System.Environment]::SetEnvironmentVariable('DOCKER_HOST', 'tcp://localhost:2375', [System.EnvironmentVariableTarget]::Machine) |
Docker CLI unter Windows installieren
Wenn man bereits choco nutzt, geht das easy mit
1 |
choco install docker-cli --confirm |
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
1 |
docker --version |
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
1 |
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest |
! Funktioniert noch nicht. Das Zertifikat wird vom Browser nicht anerkannt !
Zertifikat auf der Linux WSL erzeugen und das Zertifikat nach D:\Docker kopieren:
1 2 3 4 5 6 7 8 |
wsl sudo apt install openssl sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout "/media/privatekey.key" -out "/media/certificate.crt" DE Enter solange drücken, bis fertig ist exit wsl sudo cp /media/privatekey.key D:\Docker\. wsl sudo cp /media/certificate.crt D:\Docker\. |
Login