English English

Docker - Einführung und die wichtigsten Befehle

Dies ist eine Einführung in die Bedienung von Docker. Sie können Docker-Container erstellen, um z.B. die Verwaltung von gehosteten Diensten auf Ihrem Server zu verbessern.


In dieser Einführung wird ein Linux-Server verwendet.

Was ist Docker?

Docker ermöglicht es Ihnen, Container zu erstellen und auszuführen, die jede Art von Anwendungen oder Diensten enthalten können. Alle Konfigurationen und Pakete des Dienstes oder der Applikation werden in einem Container gespeichert. Der positivste Teil dabei ist, dass Sie den Container problemlos zwischen verschiedenen Diensten und Umgebungen verschieben können. Ein Docker-Container ist eine eigene Umgebung, die auf einem Server (Linux, Windows, etc.) ausgeführt werden kann und damit eine virtuelle Maschine ersetzt.


Die Architektur von Docker

Die Docker-Instanz auf Ihrem Server kann in einen Daemon und einen Client aufgeteilt werden. Der Daemon verfügt über eine RESTful-API und kommuniziert mit dem Client über das HTTP-Protokoll mit Hilfe der RESTful-API. Der Benutzer erhält Informationen von Docker oder sendet Anweisungen (z.B.: an einen Docker-Container) über den Client, der dann über das HTTP-Protokoll kommuniziert und sendet Befehle in der RESTful API (GET, POST-Befehle, etc.) an den Docker-Daemon sendet. Der Daemon kümmert sich um die Docker-Container und -Bilder (mehr dazu später in diesem Tutorial). Der Client fungiert als Vermittler zwischen dem Benutzer und der RESTful-API, die wie bereits erwähnt für die Kommunikation mit dem Daemon verwendet wird.

 

Docker Architecture simple explained
Architektur von Docker einfach erklärt


Die Docker-Instanz läuft in der Regel in einem privaten Netzwerk. Der darauf befindliche Daemon verbindet sich mit der (offiziellen) öffentlichen Docker-Hub-Registry (die von der Firma dieser Software gehostet wird), um beispielsweise Docker-Images herunterzuladen (die betriebsbereit sind). Es kann sich auch mit anderen Registrierungsstellen verbinden, wenn es so konfiguriert ist.
Aber jede Docker-Instanz hat eine private Docker-Registry, die Docker-Images speichert, die z.B. erstellt oder heruntergeladen wurden. Diese Registry ist privat und nur der Daemon kann mit ihr über HTTP kommunizieren.


Docker-Einrichtung

Die wichtigsten Teile von Docker sind der Docker-Container und das Volumen.
Ein Volume enthält die Daten (Storage) und Metadaten (Port Mappings und Umgebungsvariablen) und wird von einem oder mehreren Containern verwendet. Der Container ist der Prozess, der den Dienst oder die Anwendung ausführt.

Docker kann über den apt Paketmanager installiert werden. Du kannst Docker über diesen Befehl installieren:

apt-get install docker.io



Wichtige Docker-Befehle

Befehl zum Erstellen eines Docker-Images

docker build 


Ein Docker-Image als Container ausführen

docker run 



Einen Docker-Container in ein Docker-Image umwandeln

docker commit



Ein Docker-Bild mit einem bestimmten tag (Bezeichnung) versehen

docker tag 



Wie man eine Anwendung mit Docker erstellt

Dieser Teil des Tutorials zeigt, wie Sie eine Docker-Anwendung erstellen können. Sie werden über wichtige Befehle und Funktionalitäten wie z.B. Port Mapping informiert. 

1. Ein Dockerfile (Docker-Datei) erstellen

Eine Docker-Anwendung benötigt zunächst ein Docker-Image. Es gibt einige verschiedene Methoden, um ein Docker-Image zu erstellen. Aber hier werden wir ein Dockerfile verwenden, um unser Docker-Image zu erstellen. Dies ist im Wesentlichen eine Textdatei, die Befehle enthält, die ausgeführt werden, wenn die Docker-Anwendung gestartet wird.

Wir werden die NodeJS-Anwendung "todo" installieren. Erstellen Sie einen neuen Ordner für die Anwendung und wechseln Sie in den neu erstellten Ordner. Erstellen Sie in diesem Ordner eine neue Textdatei mit dem Namen "Dockerfile", die Folgendes enthält:

FROM node
LABEL maintainer Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!
RUN git clone -q https://github.com/docker-in-practice/todo.git
WORKDIR todo
RUN npm install > /dev/nul
RUN chmod -R 755 /todo
EXPOSE 8000/tcp
CMD ["npm","start"] 

FROM - Definiert das verwendete "base build" (Basis-Dockerimage). Wir verwenden hier das Node Image, um diese NodeJS Anwendung auszuführen und haben Zugriff auf alle NodeJS Bibliotheken.
LABEL Maintainer - setzt ein Label für Maintainerinformationen.
RUN - Führt einen Befehl auf der Shell-Kommandozeile aus. Hier klonen wir ein Git-Repository, installieren die Anwendung und definieren die Dateiberechtigungen.
WORKDIR - Das Verzeichnis, das verwendet werden soll. Verwenden Sie hier den neu erstellten Ordner für die Docker-Anwendung, die wir erstellen.
EXPOSE - Die Ports, die für diese Anwendungen geöffnet werden sollen (Wir verwenden hier Port Mapping). Sie können auch nur die Portnummer schreiben, wenn Sie sowohl das UCP- als auch das TCP-Protokoll verwenden möchten.

CMD - Ruft beim Start einen definierten Befehl auf, wenn dieser Docker-Container startet. Hier starten wir die NodeJS-Anwendung. Dieser Befehl hat folgende Syntax (bevorzugte Syntaxform):
CMD ["executable","parameter1","parameter2"]
In "executable" wird das Programm, das Sie verwenden möchten, mit Parametern aufgerufen, die anschließend aufgerufen werden. Eine weitere Syntaxform ist: CMD-Befehl param1 param2 param2
Wenn Sie z.B. Shell-Umgebungsvariablen bearbeiten möchten, dann sollten Sie den Befehl sh verwenden. Beispiel: CMD ["sh","-c","echo $HOME"]
Mit dem Befehl "sh" können Sie Befehle direkt über die Shell und nicht über Docker ausführen.


2. Erstellte Dockerdatei in ein Docker-Image umwandeln

Nun werden wir ein Docker-Image aus der erstellten Dockerdatei erstellen. Wenn Sie sich im gleichen Ordner wie die Dockerdatei befinden, dann rufen Sie diesen Befehl mit "." auf:

docker build .

Wenn Sie sich in einem anderen Ordner als die Dockerdatei befinden, dann schreiben Sie hier den Ordnerpfad anstelle von ".".

Wenn Sie den oben genannten Befehl ausführen, erhalten Sie die Ausgabe aller Befehle, die sich in der Dockerdatei befinden.
Die letzte Zeile ist die wichtige Zeile. Dort sehen Sie die ID des neu erstellten Docker-Images.
Beispielausgabe (es wird nur die letzte Zeile angezeigt):

Successfully built 56c32xda05ba

Sie erhalten eine andere ID als die hier angezeigte ID "56c32xda05ba".

Definiere nun ein Label für diese ID, so dass du stattdessen das Label verwenden kannst, um auf dieses erstellte Docker-Image zu verweisen:

docker tag 56c32xda05ba todoapplication



3. Docker-Container starten


Verwenden Sie den Befehl "docker run" mit seinen Parametern und dem Namen des erstellten Dockerimages (hier: "todoapplication"), um den neu erstellten Container zu starten.

docker run -i -t -p 8000:8000 --name ContainerName todoapplication

-p - Dieser Parameter definiert, wie die Ports des Containers und der Anwendung auf die Ports auf dem Server und Hostsystem abgebildet werden sollen. Hier verbinden wir den Port 8000 (erste Nummer) im Container mit dem Port 8000 (zweite Nummer) auf dem Server.
Syntax: Host_Port:Container_Port. Diese Syntax (host:container) wird auch für das Mapping von Dateipfaden, etc. verwendet. Wir können jetzt über den Port 8000 auf die Anwendung zugreifen.

-name - Gibt dem Container einen Namen, mit dem er diesen Container aufrufen kann.
-t - Führt den Docker-Container und den Vordergrund aus und verbindet ihn mit der Shell, die wir verwenden.
-i - Hält den Docker-Container offen für alle Eingaben auf der Shell.

Andere Befehle:
-v - Einlegen eines Volumes. Sie können das Dateisystem (Pfad) eines Docker-Containers mit dem Server (Host) Dateisystem (Pfad) teilen.

Andere Befehle können der offiziellen Docker-Dokumentation entnommen werden, die am Ende dieses Tutorials erwähnt wird.

Verwenden Sie diesen Befehl im Produktionsmodus:

Führen Sie den Docker-Container im Hintergrund aus.

Um den Docker-Container im Hintergrundmodus (wie ein Daemon) auszuführen, verwenden Sie den Befehl "-d":

docker run -d -i -t -p 8000:8000 --name ContainerName todoapplication



Verschaffen Sie sich einen Überblick über Ihre Docker-Container


Nur Docker-Container, die gerade ausgeführt werden, anzeigen

docker ps 



Alle Docker-Container anzeigen

docker ps -a



Zeigt Docker-Container mit einem bestimmten Namen oder einer bestimmten ID an.

docker ps -f "name=containername"
docker ps -f "id=56c32xda05ba"

 


Zeigt Dateien an, die von jeder Art von Dateioperation (Hinzufügen, Löschen, etc.) im Docker-Image betroffen sind.

Sie können diesen Befehl (und auch andere Befehle) mit der ID oder dem Namen des Docker-Containers verwenden.

docker diff todoapplication
docker diff 56c32xda05ba


Sie erhalten eine Ausgabe ein wenig ähnlich wie diese:

A /run/nginx.pid
C /var/lib/nginx/tmp
A /var/lib/nginx/tmp/logs

A - Bedeutet, dass eine Datei oder ein Verzeichnis hinzugefügt wurde.
D - Eine Datei oder ein Verzeichnis wurde gelöscht.
C - Eine Datei oder ein Verzeichnis wurde geändert.

 


Logs eines Docker-Containers anzeigen

Wenn Sie Protokolle eines bestimmten Docker-Containers anzeigen möchten, verwenden Sie den Befehl "Dockerprotokolle" mit dem Containernamen oder der ID.
Standardmäßig: Es werden alle Protokolle angezeigt.

Logs mit der dazugehörigen Zeit (timestamp) anzeigen

docker logs -t 56c32xda05ba


Nur den letzten Teil der Logs anzeigen (tail)

docker logs --tail 56c32xda05ba

Achtung: Bitte beachten Sie den Unterschied zwischen den Befehlsargumenten "--tail" und "-t".


Anzeige der Logs laufen lassen(follow - Logs-Ausgabe folgen)

docker logs -f 56c32xda05ba



Laufenden Docker-Containers stoppen

Wenn Ihr Docker-Container im Vordergrund läuft, können Sie ihn mit dem Tastaturbefehl "CTRL-Z" stoppen. Aber (im produktiven Einsatz) würden Sie den Docker-Container normalerweise als Daemon ausführen. Daher müssen Sie den Docker-Container stoppen, indem Sie die ID des Containers oder Containernamens verwenden.

docker kill containername
docker kill containerID


Sie können auch ein bestimmtes Linux-POSIX-Signal (SIGINT, SIGHUP, etc.) verwenden, um Ihren Container zu stoppen.

docker kill --signal=SIGHUP containername




Zeigt die CPU-Auslastung der Docker-Container an.

Zeigt die CPU-Auslastung für alle laufenden Docker-Container an.

docker stats


Zeigt die CPU-Auslastung für einen bestimmten Docker-Container an.

docker stats containername




Docker-Versionsnummer anzeigen

docker --version




Einige Docker-Befehle für Fortgeschrittene

Sie können diese Befehle als eine Art Cheat-Sheet verwenden, um Ihre Docker-Container und Docker-Images schneller zu verwalten.

 Alle laufenden Docker-Container stoppen

docker stop $(docker ps -q | paste -sd " " -)


Alle Docker-Container stoppen und entfernen

docker rm -f $(docker ps -aq | paste -sd " " -)


Alle Docker-Images stoppen und entfernen

docker rmi -f $(docker images -aq | paste -sd " " -)




Weiterführende Informationen



Docker wird auch empfohlen, wenn Sie viele Container verwenden und Ihre Nutzung auf mehr als 100 Docker-Container skalieren möchten.
Dies ist möglich durch das Docker Layering. Das Dateisystem, das von einem Docker-Container verwendet wird, wird in einem Docker-Image gespeichert, das von vielen Containern verwendet werden kann. Durch den Copy-on-Write Mechanismus ist eine geringere Festplattenbelegung möglich.

Der Copy-on-Write Mechanismus funktioniert folgendermaßen. Wenn ein laufender Container in eine Datei schreiben möchte, muss er die Änderung aufzeichnen, indem er das Element in einen neuen Bereich der Festplatte kopiert. Wenn ein Docker diese Operation durchführt und durchgeführt wird, dann wird dieser neue Bereich einer Festplatte eingefroren und als Schicht mit einer eigenen ID (Identifikator) aufgezeichnet.

Docker kann zum Beispiel verwendet werden, um Ihre Softwareanwendung zu erstellen und zu hosten, aber auch, um Dienste (wie einen Webserver, Mailserver, etc.) auf Ihrem Server zu hosten. Es ermöglicht Ihnen einen viel besseren Workflow und eine bessere Skalierbarkeit.
Wenn Sie Docker nur verwenden möchten, um (Web-)Dienste (wie Wordpress, Apache Webserver, etc.) einfacher einzurichten, dann lesen Sie bitte das andere Docker-Tutorial über die Verwendung von Docker zur Einrichtung und Ausführung eines Webdienstes mit vorhandenen Docker-Images.

Aber wenn Sie mehr über die Docker-Befehle erfahren möchten, dann besuchen Sie bitte auch die offizielle Dokumentationsseite auf docker.com.

Mehr über den Befehl "docker run":
https://docs.docker.com/engine/reference/run/

Mehr über den Befehl "docker build":
https://docs.docker.com/engine/reference/commandline/build/

Mehr über den Befehl "docker commit":
https://docs.docker.com/engine/reference/commandline/commit/

Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Ok