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.