Wiki/Software-Install/Docker/Guide-de.md

31 KiB

Was ist Docker?
Docker ist eine Plattform zum Erstellen und Ausführen von Anwendungen in Containern. Container sind leichte und portable Pakete, die alles enthalten, was zur Ausführung der Anwendung benötigt wird. Docker stellt Werkzeuge zum Erstellen, Verwalten und Bereitstellen von Containern bereit und bietet Vorteile wie Konsistenz, Portabilität, Effizienz und Sicherheit.

Installation

Linux

Debian (Engine)
Ubuntu (Desktop)
Fedora (Desktop)
Arch-based distro's (Desktop)

Andere

Windows
Mac

Nach der Installation

Es kann sein, dass Sie als nicht-root-Benutzer nicht die Berechtigungen haben, Docker zu bearbeiten und auszuführen. Bitte beachten Sie, dass die folgenden Schritte für Debian/Ubuntu gelten. Hier sind die Schritte, um dies zu ändern:

Falls Sie keinen nicht-root-Benutzer erstellt haben, führen Sie Folgendes aus:

sudo useradd -s /bin/bash -m <username>

Um dem gerade erstellten Benutzer die Berechtigung für sudo zu geben, navigieren Sie zu /etc/sudoers und bearbeiten Sie die Datei mit nano oder vim. Es wird empfohlen, visudo zu verwenden, da es die Syntax überprüft, um Fehler zu vermeiden. In diesem Beispiel verwende ich nano wie folgt:

sudo nano /etc/sudoers

Fügen Sie am Ende der Datei Folgendes hinzu:

<username> ALL=(ALL:ALL) ALL

Stellen Sie anschließend sicher, dass Sie sich als root abmelden und sich als der neue Benutzer anmelden. Versuchen Sie etwas mit sudo auszuführen. In diesem Beispiel habe ich Debian wie folgt aktualisiert:

sudo apt update

Wenn Sie keine Fehlermeldungen erhalten haben, waren die obigen Schritte erfolgreich. Jetzt müssen wir den Benutzer zur Docker-Gruppe hinzufügen, damit wir die Operationen in Docker durchführen können, ohne dem Benutzer vollen Zugriff auf das System zu geben.

Hinweis
Führen Sie Docker nicht mit Root-Rechten aus.

Überprüfen Sie, ob die Docker-Gruppe bereits erstellt wurde:

getent group docker

Die Ausgabe sollte ungefähr wie folgt aussehen:

docker:x:975

Wenn das Terminal keine Ausgabe liefert, erstellen Sie eine neue Gruppe namens "docker":

sudo groupadd docker

Fügen Sie nun Ihren Benutzer zur Gruppe hinzu und aktivieren Sie die Änderungen sofort:

sudo usermod -aG docker $USER
newgrp docker

Um zu testen, ob alles korrekt konfiguriert wurde, geben Sie Folgendes ein:

docker run --name test hello-world

Werkzeuge für die Entwicklung

Visual Studio

Visual Studio Remote WSL
Microsoft Docker Extension for VS Code
VS with Docker Development Tools

Eclipse

Doclipser

GitLab & Docker

GitLab Docker images

Applications

Platform Name Link Comment
Linux Whaler Link Flatpak
Terminal Lazydocker Link \
Docker Portainer Link Web-UI
Docker Rancher Link Web-UI + better for Kubernetes

Nützliche Befehle und Tipps

Um die vollständige Docker CLI-Dokumentation zu sehen, folgen Sie bitte diesem Link.Dort finden Sie Anleitungen für jeden Docker-Befehl, den Sie ausführen können, einschließlich Themen wie Docker Compose-Dateien, Dockerfiles, APIs und vielem mehr.

Standardmäßig zeigt der Befehl "docker ps" nur die laufenden Container an und nicht die beendeten. Mit dem folgenden Alias, den Sie in Ihrer .bashrc-Datei hinzufügen können, können Sie alle Container anzeigen und nur die wichtigen Informationen sehen:

alias dockerps='docker container ls -a --format "table {{.Image}}\t{{.Names}}\t{{.Ports}}\t{{.State}}"'

Dieser Alias definiert den Befehl "dockerps", der die Option "-a" verwendet, um alle Container anzuzeigen, und das Format "table", um nur die Spalten für Image, Namen, Ports und Zustand anzuzeigen. Sie können dann einfach "dockerps" ausführen, um eine übersichtliche Liste aller Container und ihrer relevanten Informationen anzuzeigen.

Dies kann besonders praktisch sein, wenn Sie einen schnellen Überblick über alle Container auf Ihrem System benötigen.

Curl

Der Curl-Befehl ist ein Befehlszeilentool, das verwendet wird, um Daten von oder zu einem Server zu übertragen. Es unterstützt verschiedene Protokolle wie HTTP, HTTPS, FTP, FTPS und mehr. Der Curl-Befehl ist auf den meisten Unix-basierten Betriebssystemen verfügbar und kann für eine Vielzahl von Aufgaben verwendet werden, wie das Herunterladen von Dateien, das Hochladen von Daten, das Testen von APIs und mehr. Hier sind einige Anwendungsbeispiele und Optionen für diesen Befehl:

# download the file and save it in the current directory:
curl -O http://example.com/myfile.txt

# download the file and save it in the current directory but under a different name:
curl -o mynewfile.txt http://example.com/myfile.txt

# for more options run folling:
curl --help

Mit diesen Beispielen können Sie eine Datei von einer bestimmten URL herunterladen und im aktuellen Verzeichnis speichern. Sie können auch den Dateinamen ändern, unter dem die heruntergeladene Datei gespeichert wird. Weitere Optionen und Funktionen des Curl-Befehls finden Sie in der Dokumentation oder indem Sie den Befehl "curl --help" ausführen.

Images

Ein Docker-Image ist ein ausführbares Paket, das alles enthält, was benötigt wird, um eine Software auszuführen. Es umfasst den Code, die Laufzeitumgebung, Systemwerkzeuge, Bibliotheken und Einstellungen. Docker-Images werden aus Dockerfiles erstellt. Wenn Sie den Befehl "docker images" ausführen, sehen Sie folgende Informationen:

  • Repository: The name of the repository from which the image was pulled.
  • Tag: The specific version of the image.
  • Image ID: A unique identifier for the image.
  • Created: The date and time at which the image was created.
  • Size: The size of the image in bytes.

Docker hub

Um alle verfügbaren Container anzuzeigen, besuchen Sie hub.docker.com
oder suchen Sie nach den Containern über das Terminal mit:

docker search

Herunterladen (Pull)

Um ein Image herunterzuladen, führen Sie den folgenden Befehl aus:

docker pull <repository>

Wenn Sie nicht angegeben haben, welche Version heruntergeladen werden soll, wird standardmäßig die ":latest"-Version heruntergeladen. Um eine spezifische Version des Containers herunterzuladen, verwenden Sie:

docker pull <repository>:version

Beispiel: Um den Nginx-Webserver herunterzuladen, der auf Alpine Linux läuft:

docker pull linuxserver/nginx

Anzeigen

Um alle Images anzuzeigen, verwenden Sie den Befehl:

docker images

Löschen

Um ein Image zu löschen, verwenden Sie den Befehl:

docker image rm <container1>                # Ein einzelnes Container-Image entfernen
docker image rm <container1>:1.04           # Eine spezifische Version eines Images entfernen
docker image rm <container1> <container2>   # Mehrere Container-Images entfernen

Hinweis
Löschen Sie kein Image, das von einem laufenden Container verwendet wird.

Bereinigen (Prune)

Das Prune-Kommando löscht nicht verwendete Images. Verwenden Sie es mit Vorsicht.

Verwenden Sie auf eigene Gefahr

docker image prune

Volumes

Sie können ein Volume erstellen, um Daten zu persistieren und zwischen Containern und dem Host zu teilen. Ein Volume ist ein Verzeichnis, das außerhalb des Dateisystems des Containers gespeichert wird und von Docker verwaltet wird. Nachdem das Volume erstellt wurde, erstellt Docker ein neues Verzeichnis, das Sie in einem Container einbinden können.

Hinweis
Sie müssen kein Container-Volume erstellen, wenn der Container nur einmal verwendet wird.

Erstellen

Um ein Volume zu erstellen, verwenden Sie den folgenden Befehl:

docker volume create <volume-name>

Inspektion & Auflistung

Um alle Volumes anzuzeigen oder Informationen zu einem bestimmten Volume anzuzeigen, verwenden Sie die folgenden Befehle:

docker volume ls                          # Alle Volumes auflisten
docker volume inspect <volume-name>       # Informationen zu einem Volume anzeigen

Löschen von Volumes

Um ein bestimmtes Volume zu löschen, verwenden Sie den folgenden Befehl:

docker volume rm <container1>                # Ein einzelnes Volume entfernen
docker volume rm <container1> <container2>   # Mehrere Volumes entfernen

Um alle Volumes zu löschen, die von keinem Container verwendet werden, verwenden Sie den Befehl:

docker volume prune

Verwenden Sie auf eigene Gefahr

docker run

Der Befehl "docker run" ist ein All-in-One-Tool. Wenn Sie diesen Befehl ausführen, wird das Image heruntergeladen (falls noch nicht vorhanden), der Container erstellt und gestartet. Der Befehl "docker run" besteht aus den folgenden Schritten:

docker image pull <image>
docker container create <container-name>
docker container start <container-name>

Es ist ratsam, Docker-Container im Hintergrund auszuführen (detached). Das bedeutet, dass Sie die Protokolle nicht sehen und nicht in Echtzeit mit dem Container interagieren können. Um einen Container im Hintergrund auszuführen, fügen Sie einfach -d hinzu, z.B.:

docker run -d --name <container-name> <image>

Um den Port anzugeben, verwenden Sie den folgenden Befehl:

docker run -p <port-host>:<port-container> --name <container-name> <image>

Um weitere Optionen anzuzeigen, verwenden Sie den Befehl:

docker run --help

Hinweis

  • Es spielt keine Rolle, welche Optionen und in welcher Reihenfolge sie angegeben werden.
  • Wenn Sie weitere Optionen hinzufügen möchten, ist es besser, dies mit Docker Compose zu tun, da es einfacher ist, eine Datei anstatt eines Befehls zu bearbeiten.

Hier ist ein Beispiel für den Befehl docker run:

docker run -d\
  --name=calibre-web\
  -e PUID=1000\
  -e PGID=1000\
  -e TZ=Etc/UTC\
  -e DOCKER_MODS=linuxserver/mods:universal-calibre `#optional`\
  -e OAUTHLIB_RELAX_TOKEN_SCOPE=1 `#optional`\
  -p 8083:8083\
  -v /PATH/TO/DATA:/config\
  -v /PATH/TO/CALIBRE/LIBRARY:/books\
  --restart unless-stopped\
  lscr.io/linuxserver/calibre-web:latest

Docker-Container

Der Befehl "docker container" bietet eine Reihe von Unterbefehlen zum Erstellen, Starten, Stoppen und Löschen von Containern sowie zur Überprüfung und Verwaltung ihrer Konfiguration, Protokolle und Leistung. Hier sind einige wichtige Befehle:

List

Mit diesem Befehl können Sie alle Container auflisten. Sie können auch Filter verwenden, um die Standardansicht anzupassen. Dies kann am besten mit einem Alias in Linux erfolgen.

docker container ls           # Alle laufenden Container auflisten
docker container ls -a        # Alle Container auflisten

Create

Dieser Befehl erstellt den Container, ohne ihn zu starten. Hier ist ein Beispiel:

docker container create --name my_container -p 8080:80 nginx:latest

Start & Stop, Kill

Mit diesen Befehlen können Sie den Container starten und stoppen. Mit dem Befehl docker container kill können Sie den Container abrupt beenden. Beachten Sie jedoch, dass dabei keine Aufräumarbeiten im Container durchgeführt werden. Verwenden Sie kill daher mit Vorsicht.

docker container start <container1>  <container2>      # Einen oder mehrere Container starten
docker container stop <container1> <container2>        # Einen oder mehrere Container stoppen
docker container kill <container1> <container2>        # Vorsicht: Container abrupt beenden

Pause & Unpause

Diese Befehle sind nützlich, um die Prozesse eines Containers vorübergehend anzuhalten, ohne den Container zu stoppen oder zu löschen. Dadurch können Wartungs- oder Problembehandlungsaufgaben durchgeführt werden, während der Zustand des Containers erhalten bleibt.

docker container ls           #list all running container
docker container ls -a        #list all container

Rename

Um den Namen eines Containers zu ändern, verwenden Sie den folgenden Befehl:

docker container <container_name_old> <container_name_new>

Exec

Mit diesem Befehl können Sie Befehle im Container ausführen und die Ausgabe anzeigen. Hier sind einige Beispiele:

  • Um den Inhalt des Home-Verzeichnisses anzuzeigen:
docker container exec my_container ls /home
  • Um eine Verbindung zum Terminal des Containers herzustellen:
docker container exec -it <container> bash

Logs

Dieser Befehl ermöglicht es Ihnen, die Protokolle des Containers anzuzeigen. Beachten Sie, dass dieser Befehl nur funktioniert, wenn der Docker-Container mit dem "json-file" oder "journald" Protokollierungs-Treiber gestartet wurde. Wenn in der "daemon.json"-Konfigurationsdatei keine spezifische Protokollierungskonfiguration angegeben ist, ist "json-file" der Standardtreiber. Die "daemon.json"-Datei befindet sich unter "/etc/docker". Verwenden Sie den folgenden Befehl, um die Protokolle des Containers anzuzeigen. Sie können auch weitere Optionen verwenden, um die Ausgabe anzupassen:

docker container logs <container>                            # Vollständiges Protokoll anzeigen
docker container logs --details <container>                  # Alle Protokolldetails anzeigen
docker container logs -f <CONTAINER_NAME>                    # Echtzeitprotokoll anzeigen
docker container logs --tail <COUNT> <CONTAINER_NAME>        # Ausgabe begrenzen

Zusätzlich stehen die Optionen --since und --until zur Verfügung. Um weitere Informationen zu erhalten, führen Sie den folgenden Befehl aus:

docker container logs --help

Alternative

Die meisten häufig verwendeten Befehle sind bereits in Docker integriert. Zum Beispiel können Sie anstelle von docker container start den Befehl docker start verwenden

Docker-File

Mit einem Dockerfile können Sie ein Container-Image erstellen. In den folgenden Beispielen verwenden wir ein bereits vorhandenes Container-Image und passen es an unsere Bedürfnisse an. Schauen wir uns an, aus welchen Teilen ein Dockerfile besteht:

Command Alternative Explanation
FROM - Gibt das Basis-Image an
WORKDIR - Legt das Arbeitsverzeichnis fest
COPY ADD Kopiert Dateien vom Hostsystem in den Container
RUN - Führt Befehle im Container aus, um Pakete zu installieren, das System zu aktualisieren oder die Umgebung zu konfigurieren
EXPOSE - Gibt an, auf welchen Ports der Container hören soll
CMD ENTRYPOINT Definiert den Standardbefehl, der beim Starten des Containers ausgeführt werden soll

Wichtig

CMD und RUN sind nicht dasselbe. RUN wird verwendet, um Befehle im Container während des Build-Prozesses auszuführen. Dies wird normalerweise verwendet, um etwas einmalig auszuführen, z.B. das Aktualisieren und Installieren von Paketen. Wenn Sie mehrere Dinge installieren müssen, führen Sie nicht mehrere RUN-Befehle aus. Verwenden Sie stattdessen den folgenden Syntax:

RUN apt update && apt upgrade && apt install python3

Achten Sie darauf, den richtigen Port für die webbasierte Anwendung freizugeben.

1. Beispiel: Node.js-Anwendung

# Verwenden Sie ein offizielles Node.js-Laufzeitimage als Basisimage
FROM node:14-alpine

# Setzen Sie das Arbeitsverzeichnis im Container
WORKDIR /app

# Kopieren Sie die package.json- und package-lock.json-Dateien in den Container
COPY package*.json ./

# Installieren Sie die Abhängigkeiten
RUN npm install

# Kopieren Sie den Anwendungscode in den Container
COPY . .

# Exponieren Sie den Port 3000 nach außen
EXPOSE 3000

# Definieren Sie den Befehl zum Starten der Anwendung beim Starten des Containers
CMD [ "npm", "start" ]

2. Beispiel: Wordpress

# Verwenden Sie ein offizielles PHP-Laufzeitimage als Basisimage
FROM php:7.4-apache

# Setzen Sie das Arbeitsverzeichnis im Container
WORKDIR /var/www/html

# Kopieren Sie die WordPress-Dateien in den Container
COPY . .

# Setzen Sie den Besitzer der WordPress-Dateien auf den Webserver-Benutzer
RUN chown -R www-data:www-data .

# Installieren Sie die erforderlichen PHP-Erweiterungen für WordPress
RUN docker-php-ext-install mysqli pdo_mysql

# Exponieren Sie den Port 80 nach außen
EXPOSE 80

# Definieren Sie den Befehl zum Starten des Apache-Webservers
CMD [ "apache2-foreground" ]

3. Beispiel: Apache Webserver

# Verwenden Sie ein offizielles Apache-Laufzeitimage als Basisimage
FROM httpd:2.4-alpine

# Kopieren Sie die benutzerdefinierte Konfigurationsdatei in den Container
COPY httpd.conf /usr/local/apache2/conf/httpd.conf

# Exponieren Sie den Port 80 nach außen
EXPOSE 80

# Definieren Sie den Befehl zum Starten des Apache-Webservers
CMD [ "httpd-foreground" ]

Erstellen und Veröffentlichen des Containers

Nachdem Sie das Dockerfile erstellt haben, um den Docker-Container auszuführen, müssen Sie das Image erstellen und veröffentlichen. Es gibt zwei Möglichkeiten, es zu veröffentlichen: lokal oder im Docker-Register (Docker Hub).
Um das Image lokal zu erstellen und zu veröffentlichen:

docker build -t <myimage>
docker push <myimage>

Um das Image im Docker Hub zu erstellen und zu veröffentlichen:

# Falls noch nicht angemeldet, über das Terminal anmelden
docker login
# Sie können auch zuvor die Anmeldeinformationen angeben, z.B.:
docker login -u <benutzername> -p <passwort>

docker build -t <meinimage>
docker push -t <benutzername>/<meinimage>

Es besteht auch die Möglichkeit, das Image unter einer anderen Version zu veröffentlichen. Verwenden Sie dazu folgendes Format:

# Lokal
docker push <meinimage>:v1.0

# Docker Hub
docker push <benutzername>/<meinimage>:v1.0

Beachten Sie, dass, wenn Sie keine Image-Version angeben, standardmäßig immer die Version :latest verwendet wird.

docker compose

Dieses Tool wird verwendet, um einzelne oder mehrere Docker-Anwendungen mit mehreren Containern zu definieren und auszuführen. Es ermöglicht Ihnen, eine Reihe von Diensten mit jeweils eigener Konfiguration zu definieren und sie mit einem einzigen Befehl zu starten und zu stoppen. Docker Compose verwendet eine YAML-Datei, um die Dienste, Netzwerke und Volumes für die Anwendung zu definieren.
Der beste Weg, Anwendungen mit Docker Compose zu installieren, besteht darin, die vom Herausgeber bereitgestellte Konfigurationsdatei zu bearbeiten.

Installation

Um Docker Compose zu installieren, folgen Sie diesem Link
Um zu überprüfen, ob die Installation erfolgreich war, führen Sie den folgenden Befehl aus:

docker-compose --version

Um den Workflow zu optimieren, habe ich für jede Anwendung und Gruppe ein Verzeichnis erstellt und die YAML-Datei und die Verzeichnisse für die Volumes darin platziert. Zum Beispiel:

mkdir calibre-web
cd calibre-web
mkdir books config
nano docker-compose.yaml

Bereitstellung

Die folgenden Befehle sind wichtig, um die compose.yaml auszuführen:

docker-compose up                # ähnlich wie docker run / docker container start
docker-compose down              # stoppt den Container-Stack

Einzelner Container

Zunächst schauen wir uns an, wie man einen einzelnen Container erstellt. In diesem Beispiel verwenden wir calibre-web. Auf der Website hat der Herausgeber folgendes gepostet:

version: "2.1"
services:
  calibre-web:
    image: lscr.io/linuxserver/calibre-web:latest
    container_name: calibre-web
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - DOCKER_MODS=linuxserver/mods:universal-calibre #optional
      - OAUTHLIB_RELAX_TOKEN_SCOPE=1 #optional
    volumes:
      - /path/to/data:/config
      - /path/to/calibre/library:/books
    ports:
      - 8083:8083
    restart: unless-stopped

Wir sehen, dass der Herausgeber die Konfiguration für die Bereitstellung bereits festgelegt hat. Das Einzige, was wir jetzt tun müssen, ist die Pfade zu den Volumes und falls gewünscht den Port anzupassen. Nach der Anpassung könnte das docker-compose.yaml-File wie folgt aussehen:

version: "2.1"
services:
  calibre-web:
    image: lscr.io/linuxserver/calibre-web:latest
    container_name: calibre-web
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - /home/admoin/callibre-web/config:/config
      - /home/admoin/callibre-web/books:/books
    ports:
      - 80:8083
    restart: unless-stopped

multiple container

Um mehrere Container bereitzustellen, habe ich ein Beispiel mit Wordpress erstellt. Wie oben können Sie die Volumes-Pfade und andere Einstellungen anpassen. In diesem Beispiel verwende ich Wordpress.
Erstellen Sie zunächst das Verzeichnis und die .yaml-file:

mkdir  ~/wordpress && cd ~/wordpress
mkdir /html /database
nano docker-compose.yaml

Fügen Sie nun den folgenden Inhalt in die Datei ein, aber denken Sie daran, die Dateipfade für Ihren Benutzernamen, den DB-Benutzer und das Passwort sowie die IP-Adresse anzupassen:

wordpress_wordpress:
    image: wordpress
    links:
     - mariadb:mysql
    environment:
     - WORDPRESS_DB_PASSWORD=password
     - WORDPRESS_DB_USER=root
    ports:
     - "public_ip:80:80"
    volumes:
     - /home/admoin/wordpress/html:/var/www/html
wordpress_mariadb:
    image: mariadb
    environment:
     - MYSQL_ROOT_PASSWORD=password
     - MYSQL_DATABASE=wordpress
    volumes:
     - /home/admoin/wordpress/database:/var/lib/mysql

Für weitere Informationen zu Docker Compose folgen Sie diesem Link

Netzwerk

Dieser Befehl ermöglicht das Erstellen und Verwalten von Netzwerken.
Standardmäßig erstellt Docker drei integrierte Netzwerke:

  • default bridge
  • host
  • none

Folgende Netzwerke werden von Docker nicht standardmäßig erstellt werden, aber Sie können sie erstellen:

  • user-defined bridge
  • macvlan (L2, L3)
  • ipvlan

Es gibt auch zwei weitere Optionen, die jedoch veraltet oder nicht häufig verwendet werden:

  • docker swarm
  • overlay

Hier sind die Befehle zum Erstellen und Verwalten von Netzwerken:

docker network create <network-type>                                 # Erstellt das Netzwerk
docker network rm  <network-name>                                    # Entfernt das Netzwerk
docker network ls                                                    # Listet alle Netzwerke auf
docker network inspect <network-name>                                # Zeigt detaillierte Informationen an
docker network connect <network-name> <container-name>               # Verbindet den Container mit einem Netzwerk
docker network disconnect <network-name> <container-name>            # Trennt den Container vom Netzwerk

Von der Docker-Hostmaschine aus gibt es zwei sehr nützliche Befehle bei der Arbeit mit Docker:

ip address show
ifconfig            # Ähnlich wie der obige Befehl
bridge link

Note

  • Führen Sie --help für weitere Optionen aus oder verwenden Sie die docker docs um vollständige Informationen zu jedem Docker-Befehl anzuzeigen.
  • Hilfreiches YouTube-Video Link
    Bitte beachten Sie, dass NetworkChuck Docker nicht korrekt installiert hat und jeden Container mit Root-Rechten ausführt. Das liegt an dem Inhalt. Das bedeutet auch, dass jeder Container volle Root-Rechte hat.

default bridge

Dieses Netzwerk erstellt ein virtuelles Netzwerk auf dem Host und verbindet den Container mit dem Netzwerk. Dieses Netzwerk ermöglicht es mehreren Containern, miteinander zu kommunizieren, erfordert jedoch, dass Sie Portweiterleitungen konfigurieren, um den externen Zugriff auf die Container zu ermöglichen. Die standardmäßige Docker-Bridge hat einen IP-Adressbereich. Der Docker-Host würde die Adresse 172.17.0.1/16 erhalten. Alle Docker-Container werden mit diesem Netzwerk verbunden, sofern kein anderes Netzwerk angegeben wurde.

host

In diesem Netzwerkmodus kann ein Container den Netzwerkstack des Hosts verwenden. Wenn ein Container im host-Netzwerkmodus gestartet wird, teilt er denselben Netzwerknamespace wie der Host und kann dieselben Schnittstellen und Dienste wie der Host nutzen. Die Container kommunizieren über die MAC-Adresse des Hosts und erhalten eine eigene IP-Adresse.

Bitte beachten Sie, dass diese Art der Netzwerkkommunikation nicht isoliert ist, was bedeutet, dass Ihr Docker-Container frei mit anderen Geräten oder Maschinen im Netzwerk kommunizieren kann

Führen Sie die folgenden Befehle aus, um einen Container in diesem Netzwerkmodus auszuführen:

docker run --name <container-name> --network host nginx

none

Wie der Name schon sagt, deaktiviert dieses Netzwerk die Netzwerkkonnektivität für einen Container. Wenn Sie einen Container im none-Netzwerkmodus starten, hat der Container keinen Zugriff auf Netzwerkschnittstellen und kann nicht mit anderen Containern oder externen Netzwerken kommunizieren. Dieser Modus ist nützlich, um Aufgaben auszuführen, die keine Netzwerkkonnektivität erfordern.

docker run --name websrv-test --network host nginx

Benutzerdefinierte Bridge

Dieses Netzwerk funktioniert ähnlich wie die Standard-Bridge. Der Unterschied besteht darin, dass ein neues virtuelles Netzwerk erstellt wird, in dem Sie Informationen wie IP-Adresse, Bereich, Gateway usw. festlegen können. Dieses Netzwerk verbessert die Leistung, da der Datenverkehr zwischen Containern im selben Netzwerk nicht über eine NAT-Firewall geroutet werden muss. Diese Netzwerke bieten eine flexible und anpassbare Möglichkeit zur Verwaltung der Container-Netzwerkkommunikation und sind ein nützliches Werkzeug zum Aufbau skalierbarer und zuverlässiger verteilter Anwendungen.

Um dieses Netzwerk zu erstellen, verwenden Sie den folgenden Befehl:

docker network create <network-name>

Dieser Befehl erstellt nicht nur ein neues Netzwerk, sondern legt auch einen neuen IP-Bereich, Subnetz, Gateway usw. fest. Die neue Netzwerk-ID wäre standardmäßig 172.18.0.0/16, wenn sie nicht spezifiziert wird.

macvlan

Dieser Netzwerktreiber ermöglicht es Ihnen, eine Netzwerkschnittstelle in einem Container mit einer eindeutigen MAC-Adresse zu erstellen, sodass der Container wie ein separates Gerät direkt mit dem physischen Netzwerk verbunden erscheint. Jeder Container erhält seine eigene MAC-Adresse.
MACvlan hat einige Modi:

  • bridge
    In diesem Modus wird jeder Container mit einem physischen Netzwerk gebridged und der Docker-Host routet den Datenverkehr zwischen dem physischen Netzwerk und den Containern.
  • passthru
    Dieser Modus gibt die Netzwerkkarte an die Container weiter.
  • private
    In diesem Modus kann jeder Container mit anderen Geräten kommunizieren, jedoch nicht mit Containern im selben Netzwerk.

Standardmäßig wird bei Erstellung des macvlan-Netzwerks ohne Angabe des Modus der bridge-Modus verwendet.
Erstellen wir ein macvlan-Netzwerk:

# bridge mode
sudo docker network create -d macvlan\
--subnet 192.168.0.0/24\
--gateway 191.168.0.1\
-o parent=enp0s3.0\
mynetwork-bridge

# passthru mode
docker network create -d macvlan\
--subnet=192.168.1.0/24\
--gateway=192.168.1.1\
--aux-address="mode=passthru"\
-o parent=enp0s3.1\
mynetwork-passthru

# private mode
docker network create -d macvlan\
--subnet=192.168.2.0/24\
--gateway=192.168.2.1\
--aux-address="mode=private"\
-o parent=enp0s3.2\
mynetwork-private

Hinweis
In diesem Netzwerk können Sie auch die Sub-Schnittstelle angeben.

ipvlan

This network allows you to create a network interface that shares the same MAC address as the parent interface, but has a separate and unique IP address. It provides a way to create multiple containers with their own IP addresses, while using the same physical or virtual network interface.

L2

Dieses Netzwerk ermöglicht es Ihnen, eine Netzwerkschnittstelle zu erstellen, die dieselbe MAC-Adresse wie die übergeordnete Schnittstelle teilt, jedoch eine separate und eindeutige IP-Adresse besitzt. Es bietet eine Möglichkeit, mehrere Container mit ihren eigenen IP-Adressen zu erstellen, während dieselbe physische oder virtuelle Netzwerkschnittstelle verwendet wird.

docker network create -d ipvlan\
--subnet 10.7.1.0/24\
--gateway 10.7.1.3\
-o parent=enp0s3\
ip-vlan_l2

L3

In diesem Modus hat jeder Container seine eigene IP-Adresse, teilt jedoch dieselbe MAC-Adresse wie die übergeordnete Schnittstelle. Die Container kommunizieren mit anderen Geräten im Netzwerk über IP-Routing.

docker network create -d ipvlan\
--subnet 192.168.94.0/24\
-o parent=enp0s3 -o ipvlan_mode=L3\
--subnet 192.168.95.0/24\
ip-vlan_l3

Um den Container in der Lage zu machen, mit dem globalen Netzwerk zu kommunizieren, müssen Sie eine statische Route erstellen.

L2bridge

Dies ist ein Hybridmodus, der die Aspekte der L2- und L3-Modi kombiniert. Jeder Container hat seine eigene IP-Adresse und teilt dieselbe MAC-Adresse wie die übergeordnete Schnittstelle. Container innerhalb dieses Netzwerks können über IP-Routing mit anderen Geräten im Netzwerk kommunizieren und dabei Layer-2-Bridging verwenden.

docker network create -d ipvlan\
--subnet 192.168.101.0/24\
-o parent=enp0s3 -o ipvlan_mode=mode=l2bridge\
ip-vlan_l2bridge

weitere Netzwerke

Es gibt zwei weitere Netzwerkoptionen: das Overlay-Netzwerk und das Docker-Swarm. Diese werden jedoch nicht häufig verwendet und/oder sind veraltet. Wenn Sie erfahren möchten, wie Docker Swarm funktioniert, empfehle ich Ihnen, sich mit Kubernetes zu befassen, da diese Art der Containerisierung mehr Optionen bietet.