Docker Setup


Damit ich sie geordnet und griffbereit habe, sind hier die Setups für Docker zusammengefasst.

  1. Begriffsdefinitionen
  2. Docker Setup
  3. Docker Kommandos

Begriffsdefinitionen

  • Docker Dienst:
    Docker ist ein Softwaresystem, das Anwendungen in isolierten Betriebssystemumgebungen ausführt.
    Anders gesagt: Eine leichtgewichtige Form der Virtualisierung bei der der Kernel des Host-Systems genutzt wird. Also mehr als nur chroot aber weniger als eine echte virtuelle Maschine.

  • Docker Image:
    Ein Dateisystem Abbild einer lauffähigen Umgebung mit allen gewünschten Diensten und Konfigurationen. Images werden schichtweise aufgebaut, z.B.:
    1. OS-Image stellte eine Systemumgebung bereit
    2. Anwendungs-Image basiert auf auf OS-Image und fügt Dienste (z.B. einen Datenbank-Dienst) hinzu.
    3. Eigenes Image basiert auf Anwendungs-Image und beinhaltet eigene Daten (z.B. ein unternehmensspezifisches Datenbankschema).
  • Docker Container:
    Die Ausführung eines Images läuft in einem isolierten Container, wo alle Anwendungen (getrennt vom Host-System) laufen und nur durch im Container definierte Schnittstellen (z.B. Netzwerkports) mit der Außenwelt kommunizieren können.
    Es können mehrere Container parallel gestartet werden, die auf dem gleichen Image basieren, aber trotzdem von einander isoliert arbeiten.

Windows Server

Bis Mai 2023 stellte Microsoft “Docker Enterprise” zur Verfügung. Dieser Dienst wurde allerdings eingestellt: https://github.com/OneGet/MicrosoftDockerProvider

Nun steht mit dem Moby Opensource Projekt eine freie Alternative zur Verfügung, die unter Windows Server eingesetzt werden kann.

Windows Server 2019 und Server 2022

Die folgenden Befehle sind alle mit der Windows Server PowerShell mit Administratorrechten auszuführen:

  1. “Container” Feature bereitstellen
    • Install-WindowsFeature -Name Containers
      Installiert/Aktiviert das “Windows Containers” Feature im System
    • Optional: Uninstall-WindowsFeature Windows-Defender
      Bei internen Server sollten Dateioperationen ohne den Defender schneller ablaufen
    • Restart-Computer -Force
      Damit das neue Feature aktiv wird muss das System neu gestartet werden
  2. Download des Installations-Skripts:
    • Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/microsoft/Windows-Containers/Main/helpful_tools/Install-DockerCE/install-docker-ce.ps1" -o install-docker-ce.ps1
      Lädt das Powershell-Skript herunter, welches die Moby-Docker Binaries installieren soll.
    • .\install-docker-ce.ps1
      Lädt die notwendigen Binärdateien herunter und installiert sie im System.
  3. Docker konfigurieren
    • C:\ProgramData\docker\config\daemon.json
      Diese Datei muss angelegt oder bearbeitet werden. Alle Einstellung liegen dort in einer JSON Struktur
    • Ein neues Docker-Daten Verzeichnis wird wie folgt konfiguriert:
      1{
      2  "data-root": "D:\\Services\\Docker"
      3}
      
  4. Docker starten und Server Images herunterladen:
    • Start-Service docker
      Fährt den Dienst hoch. Laut Standardeinstellung wird Docker bei jedem Reboot automatisch gestartet.
    • docker image pull mcr.microsoft.com/windows/nanoserver:ltsc2022
      Lädt das Nano-Server 2022 Image herunter, in dem minimalistische Dienste laufen sollten. Die Download-Größe beträgt etwa 120 MB
    • docker image pull mcr.microsoft.com/windows/servercore:ltsc2022
      Lädt das Server-Core 2022 Image herunter, in dem alle regulären Dienste laufen sollten. Die Download-Größe beträgt etwa 2 GB.
    • docker image pull mcr.microsoft.com/windows/nanoserver:1809
      Lädt das Nano-Server Image herunter, in dem minimalistische Dienste laufen sollten. Die Download-Größe beträgt etwa 150 MB
    • docker image pull mcr.microsoft.com/windows/servercore:ltsc2019
      Lädt das Server-Core Image herunter, in dem alle regulären Dienste laufen sollten. Die Download-Größe beträgt etwa 2 GB.

Weitere Details zum Moby Setup findet man unter learn.microsoft.com

Ebenso aufgelistet sind die JSON Konfigurationseinträge

Server 2016

Das aktuelle Installations-Skript für die Moby-Docker Binaries lädt Programmdateien, die mit Windows Server 2016 nicht mehr kompatibel sind. Allerdings funktionieren ältere Varianten mit dieser Plattform. Sie müssen manuell heruntergeladen werden.

  1. Windows Container Feature installieren und System neu starten:
    • Install-WindowsFeature -Name Containers
    • Restart-Computer -Force
  2. Download und Installation von Moby v20.10.24:
    • curl https://download.docker.com/win/static/stable/x86_64/docker-20.10.24.zip -o docker-20.10.24.zip
      Download von https://download.docker.com/win/static/stable/x86_64/docker-20.10.24.zip
    • Inhalt der ZIP Datei sind dockerd.exe und docker.exe, diese beiden Dateien müssen nach C:\Windows\System32 kopiert werden.
    • mkdir C:\ProgramData\docker\config
      erzeugt das Arbeitsverzeichnis des Dockerdienstes.
  3. Docker Dienst starten und Images herunterladen:
    • Start-Service docker
    • docker image pull mcr.microsoft.com/windows/nanoserver:sac2016
      Lädt das Nano-Server Image herunter, in dem minimalistische Dienste laufen sollten. Die Download-Größe beträgt etwa 450 MB
    • docker image pull mcr.microsoft.com/windows/servercore:ltsc2016
      Lädt das Server-Core Image herunter, in dem alle regulären Dienste laufen sollten. Die Download-Größe beträgt etwa 5.7 GB.

Frühere Installationsmethode

Zu Dokumentationszwecken befindet sich hier noch die Setup-Anleitung des früheren Microsoft Docker-Provider (Docker Enterprise), der nun nicht mehr verfügbar ist:

  • Server 2016:
    • [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
      ermöglicht die Installation von Updates (ohne diese Zeile gibt es Probleme mit den Zertifikaten)
    • Install-PackageProvider -Name NuGet -RequiredVersion 2.8.5.201 -Force
      installiert die notwendige NUGET Version für die weitere Installation
    • Install-Module DockerMsftProvider -Force Holt den Docker MicrosoftProvider auf das System
    • Install-Package Docker -ProviderName DockerMsftProvider –Force
      Lädt Docker herunter und installiert die Software
  • Server 2019:
    • Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
      Holt den Docker MicrosoftProvider auf das System
    • Install-Package -Name docker -ProviderName DockerMsftProvider -Force -RequiredVersion 19.03
      Lädt Docker herunter und installiert die Software
  • Server 2022:
    • Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
      Holt den Docker MicrosoftProvider auf das System
    • Install-Package -Name docker -ProviderName DockerMsftProvider
      Lädt Docker herunter und installiert die Software

Folgende Quellen wurden verwendet:

  • blog.sixeyed.com
  • medium.com
    1. Docker starten und Server Images herunterladen:
    • Start-Service docker
      Fährt den Dienst hoch. Laut Standardeinstellung wird Docker bei jedem Reboot automatisch gestartet.
    • docker image pull mcr.microsoft.com/windows/nanoserver:sac2016
      Lädt das Nano-Server Image herunter, in dem minimalistische Dienste laufen sollten. Die Download-Größe beträgt etwa 450 MB
    • docker image pull mcr.microsoft.com/windows/servercore:ltsc2016
      Lädt das Server-Core Image herunter, in dem alle regulären Dienste laufen sollten. Die Download-Größe beträgt etwa 5.7 GB.

OpenSUSE 15.2

Folgende Quellen dienten als Basis:

  1. Docker installieren und starten (erfordert root-Rechte per sudo)
    • sudo zypper -n install docker docker-compose
      Installiert Docker vom konfigurierten Repository.
    • sudo systemctl start docker
      Starten den Docker Dienst.
    • sudo systemctl enable docker
      Aktiviert das automatische Starten von Docker.
  2. Docker konfigurieren
    • sudo usermod -aG docker $(whoami)
      Gibt dem aktuellen Benutzer die nötigen Rechte Docker direkt ansteuern zu dürfen.
    • /etc/docker/daemon.json
      Hier können weitere Docker Einstellungen vorgenommen werden.
      z.B.: Container-Datenverzeichnis ändern:
      1{
      2  "data-root": "/var/my_docker_dir"
      3}
      
    • sudo systemctl restart docker
      Docker neu starten und Änderungen übernehmen.
  3. Docker Images für SUSE:
    • OpenSUSE Leap:
      docker pull opensuse/leap
    • OpenSUSE Tumbleweed (Rolling release):
      docker pull opensuse/tumbleweed
    • SUSE Enterprise:
      docker pull registry.suse.com/suse/sle15

Debian 10

Folgende Quellen dienten als Basis:

  1. Docker installieren und starten (erfordert root-Rechte per sudo)
    • sudo apt remove docker docker-engine docker.io runc
      Alte Versionen von Docker entfernen
    • sudo apt update
      Software- und Updatelisten vom konfigurierten Repository herunterladen
    • sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
      Installation von zusätzlichen Tools für die folgenden Schritte
    • curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
      Integration des Repository-Sicherheitsschlüssels von docker.com
    • sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
      Hinzufügen des Docker-Software-Repositories zur lokalen Paketverwaltung
    • sudo apt update
      Download der Softwarelist (inklusive dem neuen Docker-Repository)
    • sudo apt install -y docker-ce docker-ce-cli containerd.io
      Installation der Docker Dienste
    • sudo systemctl start docker
      Starten den Docker Dienst.
    • sudo systemctl enable docker
      Aktiviert das automatische Starten von Docker.
  2. Docker konfigurieren
    • sudo usermod -aG docker $(whoami)
      Gibt dem aktuellen Benutzer die nötigen Rechte Docker direkt ansteuern zu dürfen.
    • /etc/docker/daemon.json
      Hier können weitere Docker Einstellungen vorgenommen werden.
      z.B.: Container-Datenverzeichnis ändern:
      1{
      2  "data-root": "/var/my_docker_dir"
      3}
      
    • sudo systemctl restart docker
      Docker neu starten und Änderungen übernehmen.
  3. Docker konfigurieren
    • sudo usermod -aG docker $(whoami)
      Gibt dem aktuellen Benutzer die nötigen Rechte Docker direkt ansteuern zu dürfen.
    • /etc/docker/daemon.json
      Hier können weitere Docker Einstellungen vorgenommen werden. Falls die Datei nicht existiert, kann sie mit Besitzer root angelegt werden. z.B.: Container-Datenverzeichnis ändern:
      1{
      2  "data-root": "/var/my_docker_dir"
      3}
      
    • sudo systemctl restart docker
      Docker neu starten und Änderungen übernehmen.
  4. Docker Images für Debian:
    • Neueste Debian Distribution:
      docker pull debian:latest
    • Debian 11 (Bullseye):
      docker pull debian:bullseye
      oder: docker pull debian:11
    • Minimalistisches Debian 11 (Bullseye) Setup:
      docker pull debian:bullseye-slim
    • Debian 10 (Buster):
      docker pull debian:10
      oder: docker pull debian:buster
    • Minimalistisches Debian 10 (Bullseye) Setup:
      docker pull debian:buster-slim
    • Debian 9 (Stretch):
      docker pull debian:9
      oder: docker pull debian:stretch
    • Debian 8 (Jessy):
      docker pull debian:8

Docker Kommandos

  • Nur aktuell laufende Container auflisten
    • docker container ls
    • Container werden über eine Container ID (z.B.: 123456789abc) oder über einen Namen identifiziert. Hat ein Container keinen Namen, wird einer zufällig generiert.
  • Alle Container (laufend und beendet) auflisten
    • docker container ls -a
  • Alle beendeten Container Instanzen löschen
    • docker container prune -a
  • Alle installierten Docker Images auflisten
    • docker image ls -a
    • Images werden über eine Image ID (z.B.: 123456789abc) oder über eine Kombination aus einem Namen und einem TAG identifiziert (z.B.: my_image_name:tag wie in debian:10)
  • Alle unbenutzten Docker Images löschen
    • docker image prune -a
    • Images die von Containern benutzt werden können nicht gelöscht werden.
  • Einen Docker Container auf der interaktiven Konsole startem
    • docker run -it image_name:tag
    • docker run -it image_id
  • Ein lokales Verzeichnis im Docker-Container verfügbar machen
    • docker run -v d:\shared_on_host:c:\shared -it myimage:tag
    • docker run -v /shared_on_host:/shared -it myimage:tag
    • Im Container wird das Verzeichnis shared angelegt und darin wird alles bereitgestellt, was am Host-System im Verzeichnis shared_on_host verfügbar ist. So können zwischen Host und Container Daten ausgetauscht werden.
      Parameter: -v + ` ` + host-path + : + container-path
  • Einen Server-Port im Container am Host verfügbar machen:
    • docker run -p 8080:80 -it httpd
    • Startet das httpd Apache-Webserver-Image und leitet am Host-System den Port 8080 in den Container auf Port 80 um. Man kann dann am Host z.B.: per http://host-ip:8080 auf die Webseite zugreifen, die im Container auf Port 80 läuft.
  • Ein zusätzliches Programm in einem laufenden Container starten
    • docker container exec -it container_id cmd.exe
    • docker container exec -it container_name /bin/sh
  • Einen Container beenden:
    • docker container kill container_id_or_name