Docker ist ein beliebtes Tool zum Erstellen und Ausführen von containerisierten Anwendungen. Es ist für mehrere Plattformen verfügbar und wird als eine der Backend-Containertechnologien in Kubernetes verwendet.

In Docker erstellen Sie entweder Ihre eigenen Images, um Ihre Anwendung als Container auszuführen, oder Sie können Tausende von öffentlichen Images aus dem Docker-Repository ziehen und in Ihrem Projekt verwenden. Sobald Ihr Image fertig ist, können Sie Ihre Container mit diesen Images starten. Ein Container ist eine laufende Instanz eines Docker-Images.

Die Verwaltung von Docker-Containern ist einer der wichtigsten Aspekte, um die Sie sich als Systemadministrator kümmern müssen, der Docker-Hosts/Container verwaltet.

In diesem Artikel konzentrieren wir uns auf die Verwaltung von Containern mit dem Docker-Befehl.

run-Befehl

der Befehldocker run wird verwendet, um einen Container von einem Image aus zu starten, indem Sie die Image-ID oder den Namen des Repository und/oder des Tags angeben.

$ docker run {image}

Beispiel:

$ docker run nginx

Der obige Befehl führt eine Instanz der nginx-Anwendung auf einem Docker-Host aus , wenn sie bereits existiert. Wenn sie auf dem Docker-Host nicht vorhanden ist, geht er zum Docker-Hub (standardmäßig) und holt das Image herunter. Dies geschieht jedoch nur beim ersten Mal. Für die folgenden Male wird dasselbe Image wiederverwendet.

Wenn Sie eine bestimmte Version eines Images ausführen möchten, geben Sie die Version durch einen Doppelpunkt getrennt an. Dies wird als Tag bezeichnet. Wenn Sie kein Tag angeben, betrachtet Docker es standardmäßig als die neueste Version.

Wenn Sie den Container im Hintergrund in einem abgetrennten Modus ausführen möchten, so dass Sie nach dem Start des Containers durch Docker zur Eingabeaufforderung zurückkehren, verwenden Sie das Flag -d.

Beispiel:

$ docker run nginx
Image 'nginx:latest' kann lokal nicht gefunden werden
latest: Wird aus Bibliothek/nginx gezogen
33847f680f63: Pull abgeschlossen
dbb907d5159d: Pull abgeschlossen
8a268f30c42a: Pull komplett
b10cf527a02d: Pull komplett
c90b090c213b: Pull komplett
1f41b2f2bf94: Abruf abgeschlossen
Digest: sha256:8f335768880da6baf72b70c701002b45f4932acae8d574dedfddaf967fc3ac90
Status: Heruntergeladenes neueres Image für nginx:latest
/docker-entrypoint.sh: /docker-entrypoint.d/ ist nicht leer, wird versuchen, die Konfiguration durchzuführen
/docker-entrypoint.sh: Sucht nach Shell-Skripten in /docker-entrypoint.d/
/docker-entrypoint.sh: Startet /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Ermitteln der Prüfsumme von /etc/nginx/conf.d/default.conf
10-listen-auf-IPv6-by-default.sh: info: Aktivieren von listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Startet /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Starten von /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Konfiguration abgeschlossen; bereit zum Starten
2021/08/15 12:13:23 [notice] 1#1: Verwendung der "epoll" Ereignis-Methode
2021/08/15 12:13:23 [notice] 1#1: nginx/1.21.1
2021/08/15 12:13:23 [notice] 1#1: gebaut mit gcc 8.3.0 (Debian 8.3.0-6)
2021/08/15 12:13:23 [notice] 1#1: OS: Linux 5.8.0-1039-azure
2021/08/15 12:13:23 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/15 12:13:23 [notice] 1#1: Arbeitsprozesse starten
2021/08/15 12:13:23 [notice] 1#1: Arbeitsprozess 33 starten
2021/08/15 12:13:23 [notice] 1#1: Arbeitsprozess 34 starten

ps Befehl

der Befehldocker ps listet alle laufenden Container und einige grundlegende Informationen über sie auf. Dazu gehören die Container-ID, der Name des Images, die Zeit, zu der der Container erstellt wurde, der aktuelle Status und der Name des Containers. Jeder Container erhält einen zufälligen Namen (falls nicht explizit angegeben) und eine ID.

Beispiel:

$ docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
133f5e0267a5 nginx "/docker-entrypoint...." vor 10 Sekunden Up 10 Sekunden 80/tcp jolly_elion 

Um alle laufenden und nicht laufenden/beendeten Container auf einmal aufzulisten, können Sie verwenden:

$ docker ps -a

Beispiel:

$ docker ps -a 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
fcec129f0eb4 nginx "/docker-entrypoint...." vor 46 Stunden beendet (0) vor 46 Stunden interesting_ishizaka 
6e8b1e441aa6 hello-world "/hello" vor 2 Tagen Beendet (0) vor 2 Tagen keen_shirley 

ls Befehl

Wie der Befehl ps kann auch ls zum Auflisten von Containern verwendet werden. -mit dem Flag ls können Sie alle Container auflisten (nicht nur die laufenden).

$ docker container ls

Beispiel:

$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
15796e91c30b redis "docker-entrypoint.s..." vor 2 Sekunden Up 1 Sekunde 6379/tcp flamboyant_neumann
904390b65d45 nginx "/docker-entrypoint...." vor 14 Minuten Up 14 Minuten 80/tcp nginx_new
$

stop Befehl

der Befehldocker stop wird verwendet, um einen laufenden Container zu stoppen. Hier müssen wir den Containernamen oder die ID mit angeben.

$ docker stop {container-id}

Bei Erfolg wird der Name oder die ID des Containers zurückgegeben.

Beispiel:

$ docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
133f5e0267a5 nginx "/docker-entrypoint...." vor 50 Sekunden Up 49 Sekunden 80/tcp jolly_elion 

Dies gibt die CONTAINER ID zurück, die Sie zum Stoppen des Containers verwenden können.

$ docker stop 133f5 
133f5

Beachten Sie bei diesem und den folgenden Beispielen, dass Sie keinen vollständigen Wert für die CONTAINER ID angeben müssen. Es wird nur der Teil akzeptiert, der ihn unter anderen laufenden Containern einzigartig macht, da Docker weiß, welcher Container gestoppt werden muss.

rm-Befehl

der Befehldocker rm entfernt einen gestoppten oder beendeten Container.

$ docker rm {CONTAINER NAME oder ID}

Beispiel:

$ docker rm 133f5
133f5
$

exec-Befehl

Wir können den Befehl exec verwenden, um in einen laufenden Container einzudringen. Dies ist nützlich, um laufende Container zu debuggen oder einige Dinge innerhalb eines Containers zu tun.

$ docker exec -it {Container} {Befehl}

Beispiel:

Angenommen, Sie möchten die Bash-Shell (vorausgesetzt, das Image verfügt über Bash, Sie können auch andere verfügbare Shells verwenden) innerhalb eines Containers namens unruffled_meninsky im interaktiven Modus starten, dann verwenden Sie:

$ docker exec -it unruffled_meninsky /bin/bash

Damit sollten Sie innerhalb des Containers auf einer Bash-Shell landen. Dabei steht das Flag -i für den interaktiven Modus und -t für das Terminal. Wenn Sie nur einen oder mehrere Befehle ausführen und den Container wieder verlassen möchten, können Sie dies tun:

$ docker exec unruffled_meninsky cat /etc/hosts
127.0.0.1 localhost 
::1 localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
172.17.0.2 cd2eed4acf34 

logs Befehl

Wenn ein Container im losgelösten Modus gestartet wird und wir seine Protokolle sehen wollen, können wir den Befehl logs verwenden, um seine Protokolle einzusehen:

$ docker logs {CONTAINER NAME oder ID}

Beispiel:

$ docker logs 7da6dcebaf9c
/docker-entrypoint.sh: /docker-entrypoint.d/ ist nicht leer, wird versuchen, die Konfiguration durchzuführen
/docker-entrypoint.sh: Sucht nach Shell-Skripten in /docker-entrypoint.d/
/docker-entrypoint.sh: Startet /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Ermitteln der Prüfsumme von /etc/nginx/conf.d/default.conf
10-listen-auf-IPv6-by-default.sh: info: Aktivieren von listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Startet /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Starten von /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Konfiguration abgeschlossen; bereit zum Starten
2021/08/15 12:14:09 [notice] 1#1: Verwendung der "epoll" Ereignis-Methode
2021/08/15 12:14:09 [notice] 1#1: nginx/1.21.1
2021/08/15 12:14:09 [notice] 1#1: gebaut mit gcc 8.3.0 (Debian 8.3.0-6)
2021/08/15 12:14:09 [notice] 1#1: OS: Linux 5.8.0-1039-azure
2021/08/15 12:14:09 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/15 12:14:09 [notice] 1#1: Arbeitsprozesse starten
2021/08/15 12:14:09 [notice] 1#1: Arbeitsprozess 31 starten
2021/08/15 12:14:09 [notice] 1#1: Arbeitsprozess 32 starten
$

cp Befehl

Um Dateien zwischen einem Container und dem Localhost-Dateisystem zu kopieren, können Sie den Befehl cp verwenden.

$ docker container cp {CONTAINER NAME oder ID:SRC_PATH} {DEST_PATH}|-

Beispiel:

$ docker container cp quirky_cray:/etc/nginx/nginx.conf nginx.conf.bkp

befehl export

Der Docker-Container-Befehl bietet die Möglichkeit, das Dateisystem eines Containers als TAR-Datei zu exportieren.

$ docker container export {CONTAINER NAME oder ID}

befehl inspizieren

Mit dem Befehl inspect können wir detaillierte Informationen über einen Container überprüfen:

$ docker inspect {CONTAINER NAME oder ID}

ODER

$ docker container inspect {CONTAINER NAME oder ID}

kill-Befehl

Ein laufender Container kann mit dem Befehl kill und dem optionalen Flag --signal oder -s beendet werden. Es können mehrere Container angegeben werden, um sie in einem Zug zu beenden.

$ docker kill {CONTAINER NAME oder ID} [--signal VAL]

Beispiel:

$ docker kill cd9005a0b5d2 -s 9
cd9005a0b5d2
$

stats Befehl

Um einen Live-Stream der Ressourcennutzung eines Containers anzuzeigen, können Sie den Befehl stats verwenden:

$ docker container stats {CONTAINER NAME oder ID}

Beispiel:

$ docker container stats thirsty_volhard
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
904390b65d45 thirsty_volhard 0.00% 3.406MiB / 7.775GiB 0.04% 1.02kB / 0B 0B / 8.19kB 3

top Befehl

Wie der Befehl top in Linux können wir ihn auch mit Docker verwenden, um eine Liste der laufenden Prozesse zu erhalten.

$ docker container top {CONTAINER NAME oder ID}

Beispiel:

$ docker container top durstig_volhard
UID PID PPID C STIME TTY TIME CMD
root 2603 2582 0 12:34 ?                   00:00:00 nginx: Master-Prozess nginx -g Daemon aus;
systemd 2659 2603 0 12:34 ?                   00:00:00 nginx: Arbeitsprozess
systemd 2660 2603 0 12:34 ?                   00:00:00 nginx: Worker-Prozess
$

rename Befehl

Um einen bestehenden Container umzubenennen, verwenden Sie den Befehl rename.

$ docker container rename {ALTER CONTAINER-NAME} {NEUER CONTAINERNAME}

Beispiel:

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
904390b65d45 nginx "/docker-entrypoint...." vor 7 Minuten Up 7 Minuten 80/tcp nginx_container
$ docker container rename nginx_container nginx_new
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
904390b65d45 nginx "/docker-entrypoint...." vor 7 Minuten Up 7 Minuten 80/tcp nginx_new
$

diff Befehl

Mit dem Befehl diff können wir Änderungen an Dateien oder Verzeichnissen im Dateisystem eines Containers überprüfen.

$ docker container diff {CONTAINER NAME oder ID}

Beispiel:

$ docker container diff nginx_new
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
C /run
A /run/nginx.pid
$

Zusammenfassung

Zusammenfassend lässt sich sagen, dass Docker einen umfangreichen Satz von Befehlen bietet, um Container von der Erstellung bis zur Zerstörung zu verwalten. Wir haben in diesem Artikel einige der wichtigsten Befehle und ihre Verwendung behandelt, so dass Sie eine gute Vorstellung von der Verwaltung von Docker-Containern haben sollten.

More on Docker