So installierst du Docker unter Debian 11

Docker ist eine Reihe offener Plattformen, die eine Virtualisierung auf Betriebssystemebene für die Entwicklung, den Versand und die Ausführung von Anwendungen bieten. In Docker werden Anwendungen als standardisierte Pakete, sogenannte Container, bereitgestellt. Jeder Container ist von den anderen isoliert, einschließlich der Bibliotheken und Konfigurationsdateien, aber jeder von ihnen kann über genau definierte Netzwerkkanäle kommunizieren.

Inzwischen ist Docker zu einem Standard für Softwareentwicklung und DevOps geworden. Millionen von Entwicklerinnen und Entwicklern nutzen Docker, um täglich Anwendungen zu erstellen, zu teilen und auszuführen. Es wird im gesamten Lebenszyklus der Anwendungsentwicklung eingesetzt, von der Entwicklung selbst über die Tests bis hin zur Produktion. Mit Docker wird die Anwendung flexibler und portabel. Anwendungen können auf einfache Weise auf verschiedenen Betriebssystemen ausgeführt werden, aber die Anwendung selbst bleibt gleich, von den Bibliotheken bis zu den Konfigurationsdateien.

In diesem Lernprogramm lernst du, wie du Docker auf Debian 11 Bullseye installierst. Außerdem lernst du die grundlegenden Funktionen von Docker kennen, um Container auszuführen und Images zu verwalten.

Voraussetzungen

  • Ein Debian 11 Server. Stelle sicher, dass alle Pakete auf die neueste Version aktualisiert sind.
  • Ein Root-Benutzer oder ein Benutzer mit Root-Rechten. Dieser Benutzer wird für die Installation neuer Pakete und die Bearbeitung der Systemkonfigurationen verwendet.

Abhängigkeiten installieren

Zuerst installierst du einige grundlegende Paketabhängigkeiten auf deinem Debian-System.

1. Führe den folgenden apt-Befehl aus, um neue Paketabhängigkeiten zu installieren.

apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

Gib„y“ ein und drücke„Enter„, um alle Pakete zu installieren.

Installieren von Paketabhängigkeiten für Docker

Hinzufügen des Docker-Repositorys

In dieser Anleitung wirst du Docker aus dem offiziellen Docker-Repository installieren. Du wirst also ein neues Docker-Repository zu deinem Debian-System hinzufügen.

1. Führe den folgenden curl Befehl aus, um den GPG-Schlüssel für Docker hinzuzufügen.

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

2. Danach fügst du das Docker-Repository für dein Debian 11-System mit dem folgenden Befehl hinzu.

echo \
 "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
 $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

3. Führe nun den Befehl„apt update“ aus, um alle verfügbaren Repositories zu aktualisieren/aufzufrischen.

apt update

Jetzt kannst du Docker auf Debian 11 Bullseye installieren.

Docker-Schlüssel und Repository hinzufügen

Installation von Docker unter Debian 11

1. Wenn auf deinem System bereits Docker aus dem Debian-Repository installiert ist, musst du es mit dem unten stehenden Befehl entfernen.

sudo apt remove docker docker-engine docker.io containerd runc

2. Danach kannst du Docker mit dem unten stehenden apt-Befehl erneut installieren.

apt install docker-ce docker-ce-cli containerd.io

Gib „y“ ein und drücke „Enter„, um die Installation zu bestätigen.

Docker Container installieren

3. Wenn die Installation abgeschlossen ist, führe den folgenden Befehl aus, um die Installation zu überprüfen.

Prüfe, ob der Dienst aktiviert ist oder nicht.

systemctl is-enabled docker
systemctl is-enabled containerd

Überprüfe den Status des Docker- und Containerd-Dienstes.

systemctl status docker containerd

Nachfolgend siehst du eine ähnliche Ausgabe, die du erhalten wirst.

Status des Dockerdienstes prüfen

Wie du siehst, sind die Dienste Docker und Containerd aktiv (laufen), und beide Dienste sind aktiviert und werden beim Systemstart automatisch ausgeführt.

Nicht-Root-Benutzer für Docker zulassen

Standardmäßig erlaubt Docker nur dem Benutzer „root„, Container auszuführen. Damit ein Nicht-Root-Benutzer Container ausführen kann, musst du deinen Nicht-Root-Benutzer zur Gruppe „Docker“ hinzufügen, die bei der Docker-Installation automatisch erstellt wird.

1. In diesem Beispiel wirst du den Benutzer „johndoe“ verwenden, um einen Docker-Container auszuführen.

Erstelle den neuen Benutzer „johndoe“ auf deinem Debian-System mit dem folgenden Befehl.

useradd -m -s /bin/bash johndoe

2. Führe anschließend den folgenden Befehl aus, um den Benutzer „johndoe“ zur Gruppe „docker“ hinzuzufügen.

usermod -aG docker johndoe

3. melde dich nun als Benutzer „johndoe“ mit dem folgenden Befehl an und überprüfe die Konfiguration.

su - johndoe

Führe den folgenden Docker-Befehl aus, um deine Installation zu überprüfen.

docker run hello-world

Du siehst dann die Meldung „Hallo Docker„.

Erlaube Nicht-Root-Benutzern, Docker auszuführen - docker hello-world

Nachfolgend findest du eine einfache Erklärung des Docker-Befehls, den du oben ausführst.

  • Docker wird versuchen, ein Image mit dem Namen „hello-world“ zu finden. Wenn das Image lokal verfügbar ist, führt Docker den Container aus. Wenn das Image nicht lokal verfügbar ist, sucht Docker nach dem Image „hello-world“ und lädt es aus dem Docker-Hub (dem Standard-Repository für Docker-Images) herunter.
  • Wenn das Docker-Image heruntergeladen ist, führt Docker den Container aus. Der Container führt die Befehle aus und zeigt dir die Nachricht „Hello Docker“ an.

4. Überprüfe nun den Docker-Container mit dem unten stehenden Docker-Befehl.

Prüfen des Containers mit dem Status „running„.

docker ps

Checking all containers – zeigt dir alle Container an, sowohl die laufenden als auch die gestoppten Container.

docker ps -a

Im Folgenden siehst du eine ähnliche Ausgabe wie unten.

Überprüfung des Containerstatus

Wie du siehst, wurde der neue Container namens „bold_bartix“ mit dem Basis-Image „hello-world“ erstellt und der aktuelle Status des Containers ist „Exited“ oder gestoppt. Der Containername „bold_bartix“ im Screenshot wird von Docker zufällig ausgewählt, aber du kannst den Namen deines Containers angeben.

Grundlegende Verwendung von Docker

In diesem Abschnitt lernst du die grundlegende Nutzung von Docker für die Verwaltung von Images und Containern.

1. Zuerst lädst du die Docker-Images mit dem folgenden Befehl auf deinen lokalen Computer herunter.

docker pull nginx:alpine

Der Befehl lädt das Docker-Image mit dem Namen „nginx“ und dem Tag „alpine“ auf dein System herunter.

Docker-Image herunterladen

Der Begriff „Tags“ ist wie eine Version des Images selbst. Das „nginx:alpine“ bedeutet das „nginx„-Image mit dem Tag „alpine„, was bedeutet, dass es auf dem Alpine Linux-Betriebssystem basiert. Überprüfe immer alle verfügbaren Tags der Docker-Images im offiziellen Docker-Hub-Repository.

Unten siehst du ein Beispiel für alle verfügbaren Tags für das Docker-Image „nginx„.

Docker Tags

Um alle verfügbaren Docker-Images auf deinem lokalen System zu überprüfen, führe den folgenden docker-Befehl aus.

docker images

Du wirst eine ähnliche Ausgabe wie unten sehen.

Container auf dem lokalen System prüfen

Wie du siehst, hast du zwei Docker-Images, nginx:alpine und hello-world.

2. Als nächstes führst du den folgenden Befehl aus, um einen Container zu starten.

docker run -it --rm -d -p 8080:80 --name web nginx:alpine

Jetzt erhältst du den zufälligen String und die Nummer des neuen Containers.

Optionen, die du kennen musst:

  • -i oder –interactive – halte den Container STDIN offen, auch wenn er nicht verbunden ist.
  • -t oder –tty – weist ein Pseudoterminal zu, das dein Terminal mit STDIN und STDOUT des Containers verbindet.
  • –rm – entfernt den Container automatisch, wenn der Container verlassen oder gestoppt wird.
  • -d – lässt den Container im Hintergrund laufen und entfernt ihn, nachdem er gelaufen ist.
  • -p 8080:80 – ordnet den Port zwischen Container und Hostsystem zu. Der Port „80“ des Containers wird auf den Port „8080“ des Hostsystems abgebildet.
  • –name web – gib den neuen Containernamen als „web“ an.
  • nginx:alpine – das Docker-Image, das wir verwenden, ist „nginx:alpine„.

Überprüfe nun den laufenden Container mit dem unten stehenden Befehl.

docker ps

Du wirst ein ähnliches Ergebnis wie unten sehen.

Laufender Docker-Container

Um deinen Nginx-Container zu überprüfen, öffne deinen Webbrowser und gib die IP-Adresse deines Servers mit dem Port „8080“ ein.

http://192.168.1.10:8080/

Du siehst dann die Nginx-Indexseite des Containers„web “ (siehe unten).

Überprüfe den Nginx-Status Docker-Container

3. Als Nächstes kannst du das Log des Containers überprüfen, indem du den folgenden Docker-Befehl ausführst.

docker logs web

Dann siehst du alle Logs deines Containers, von Anfang bis Ende.

Docker Prüfprotokolle

Um die Log-Ausgabe einzuschränken, kannst du die Option „–tail n“ verwenden (siehe unten).

docker logs --tail 10 web

Dann siehst du die letzten 10 Zeilen der Container-Logs.

Docker Log in Nlines begrenzen

4. Um den Docker-Container zu stoppen, kannst du den unten stehenden Docker-Befehl ausführen.

docker stop web

Überprüfe danach den laufenden Container mit dem folgenden Befehl.

docker ps
docker ps -a

Du wirst die folgende Ausgabe sehen, wie unten.

Docker-Container anhalten und Docker-Container überprüfen

Der „web„-Container ist gestoppt und wird automatisch gelöscht. Das liegt daran, dass du beim Ausführen des Containers die Option „–rm“ verwendet hast.

5. Als Nächstes lernst du, wie du den Container mit dem benutzerdefinierten Volume starten kannst. Das Verzeichnis auf dem Host-Rechner wird als Volume für den Docker-Container verwendet.

Erstelle das neue Verzeichnis „data“ und die benutzerdefinierte Datei „index.html“ mit dem folgenden Befehl.

mkdir -p ~/data/
nano ~/data/index.html

Kopiere das benutzerdefinierte „index.html„-Skript und füge es wie folgt ein.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Welcome to Docker Nginx</title>
</head>
<body>
  <h2>Hello from Nginx container</h2>
</body>
</html>

Speichere die Konfiguration, indem du die Taste„Strg+x“ drückst,„y“ eingibst und dann„Enter“ drückst.

Als Nächstes erstellst du den neuen Container mit dem unten stehenden Docker-Befehl.

docker run -it --rm -d -p 8080:80 --name web -v ~/data:/usr/share/nginx/html nginx:alpine

Jetzt erhältst du die Zufallsnummer und den String des Containers.

Mit der Option „-v ~/data:/usr/share/nginx/html“ wird die Datei „~/data“ auf dem lokalen Rechner in den Container im Verzeichnis„/usr/share/nginx/html“ eingebunden.

Überprüfe nun den Docker-Container mit dem folgenden Befehl.

docker ps

Du wirst eine ähnliche Ausgabe wie unten sehen.

Docker-Container mit benutzerdefiniertem Volumen ausführen

Als Nächstes öffnest du wieder deinen Webbrowser und gibst die IP-Adresse des Servers mit dem Port „8080“ wie folgt ein.

http://192.168.1.10:8080/

Du erhältst die benutzerdefinierte „index.html“, die du gerade erstellt hast. Das bedeutet, dass das Verzeichnis „~/data“ in das Container-Verzeichnis„/usr/share/nginx/html“ eingebunden ist.

Nginx-Container mit angepasster index.html und Docker-Volumen

6. Außerdem kannst du dich in den aktuell laufenden Container „web“ einloggen, indem du den folgenden Docker-Befehl ausführst.

Überprüfe zunächst, ob der Container „web“ läuft.

docker ps

Verbinde dich nun mit dem Container „web“, indem du den unten stehenden Befehl ausführst.

docker exec -it web /bin/sh

Überprüfe innerhalb des Containers den Hostnamen des Containers mit dem folgenden Befehl.

hostname

Überprüfe die IP-Adresse des Containers mit dem unten stehenden Befehl „ip„.

ip a

Überprüfe die Routing-Tabelle des Containers mit dem folgenden Befehl.

route -n

Nachfolgend siehst du eine ähnliche Ausgabe, die du erhalten wirst.

Dem Docker-Cocntainer anhängen

Um deine aktuelle Umgebung aufzuräumen, beende den „web„-Container mit dem folgenden Befehl.

docker stop web

Außerdem kannst du mit dem folgenden Befehl alle Container mit dem Status „exited“ entfernen.

docker rm $(docker ps --filter "status=exited" -q)

Fazit

Herzlichen Glückwunsch! Du hast Docker erfolgreich auf Debian 11 Bullseye installiert. Außerdem hast du gelernt, wie du ein Image aus dem Docker-Hub ziehst, den Docker-Container startest, den Docker-Container-Status und die Logs überprüfst und wie du das Docker-Volumen verwendest. Im nächsten Schritt kannst du versuchen, dein eigenes Docker-Image für deine Anwendung zu erstellen und es in das Docker-Hub-Repository zu pushen.

Das könnte dich auch interessieren …