GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

3 eher unbekannte Docker-Befehle, die Ihnen in einer Vielzahl von Szenarien helfen werden

Wenn Sie Docker eine Weile verwenden, haben Sie wahrscheinlich bereits einen einfachen und effektiven Workflow, der auf Sie zugeschnitten ist und einige Ihrer bevorzugten Docker-Befehle enthält (Unterbefehle, um technisch korrekt zu sein).

Früher habe ich zum Beispiel Container, die nicht ausgeführt werden, mit einem langen Befehl entfernt, der so aussieht:docker container rm $(docker container ps -qf status=exited) , es funktionierte und gab offensichtlich einen Fehler aus, wenn es keine baumelnden Container gab. Dies hörte eines Tages auf, als ich herausfand, dass wir auch eine prune haben Unterbefehl für Container! Jetzt ist dieser lange Befehl also zu einem einfachen docker container prune geworden .

Der Punkt ist, dass, obwohl viele von uns Docker schon seit einiger Zeit verwenden, die Möglichkeit besteht, dass einige Dinge im Laufe der Zeit übersehen oder vielleicht sogar vergessen wurden.

In diesem Artikel werde ich Ihnen drei Docker-Unterbefehle geben, die für Sie neu sein könnten oder die Sie nicht oft verwenden, aber ich denke, Sie sollten es tun.

Diese Unterbefehle können auch eigene Unterbefehle enthalten.

1. Der System-Unterbefehl

Docker hat ein system Befehl, der Ihnen etwas gibt Informationen auf Systemebene in Bezug auf Docker. Sie verwenden tatsächlich schon seit einiger Zeit einen seiner Unterbefehle. Merken Sie sich docker info ? Dieser Befehl ist eigentlich docker system info .

Um mehr über diesen Unterbefehl und seine Möglichkeiten zu erfahren, führen Sie --help aus Option darauf.

➟ docker system --help

Usage:  docker system COMMAND

Manage Docker

Commands:
  df          Show docker disk usage
  events      Get real time events from the server
  info        Display system-wide information
  prune       Remove unused data

Run 'docker system COMMAND --help' for more information on a command.

Lassen Sie uns jeden dieser Unterbefehle durchgehen, da ich denke, dass sie alle sehr kritisch sind.

Docker-System-df

Waren Sie jemals in einer Situation, in der der Speicherplatz Ihres Servers fast voll zu sein schien? Um zu überprüfen, ob es sich um die Container (laufende/volumes) handelt, haben Sie wahrscheinlich den du verwendet Befehl direkt auf der Datenwurzel.

Datenwurzel oder Datenwurzel ist der Ort, an dem Docker alle Daten speichert, die sich auf seinen Zustand beziehen. Dazu gehören unter anderem Bilder (Layer), Volumes, netzwerkbezogene Informationen, Plugins.

Mit du auf dem Datenstamm erfordert sudo Zugriff.

✗ du -h --max-depth=1 /var/lib/docker
du: cannot read directory '/var/lib/docker': Permission denied
4.0K    /var/lib/docker

Nicht nur das, um explizit zu wissen, wie viel die Volumes oder die Images zuordnen, müssten Sie den Befehl mehrmals ausführen.

➟ sudo du -h --max-depth=0 /var/lib/docker/volumes && \
    sudo du -h --max-depth=0 /var/lib/docker/image && \
    sudo du -h --max-depth=0 /var/lib/docker/

Eine viel bessere Alternative ist der Aufruf des docker system df Befehl. Dadurch wird der Datenstamm automatisch erkannt und alle Informationen zur Festplattennutzung durch Docker-Container, -Images und -Volumes entsprechend gedruckt.

Hier ist, was mein aktuelles System zeigt (es ist eine neue Installation)

➟ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          10        1         84.17MB   84.17MB (100%)
Containers      1         1         8.219MB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

Docker-Systembereinigung

Wenn Sie jemals (1) alle ungenutzten Netzwerke, (2) baumelnde Images, (3) angehaltene Container, (4) alle ungenutzten Volumes entfernen wollten, besteht eine große Chance, dass Sie vier separate Befehle verwendet haben oder daran gewöhnt sind, dies zu erreichen Arbeit.

docker network prune && \
    docker image prune && \
    docker volume prune && \
    docker container prune

Falls Sie zuvor nichts über container prune wussten wie ich dann wird der Befehl noch größer. Zu unserem Glück kann all dies mit nur einem einfachen Befehl erledigt werden, nämlich docker system prune --volumes .

Standardmäßig docker system prune entfernt die Volumes nicht, dafür müssen Sie --volumes verwenden Möglichkeit. Dieser Befehl löscht zusätzlich auch den Build-Cache für Sie.

Sie können das -f verwenden Option, um die (manchmal) lästige Eingabeaufforderung zu vermeiden. Siehe das Beispiel unten:

➟ docker system prune --volumes -f
Deleted Containers:
672d39c1a78969887f411ce9139e74e5b21c31fccf2bcf8c1190a9e166089ede

Deleted Networks:
Example
SSHnet
Dummy

Deleted Volumes:
dummy

Total reclaimed space: 0B

Weitere Optionen sind -a das alle unbenutzten Bilder entfernt, nicht nur die baumelnden.

Docker-Systemereignisse

Dieser Befehl ist vielleicht nicht immer nützlich, aber ich denke, jeder sollte sich dessen bewusst sein.

docker system events oder docker events kurz gibt Ihnen Echtzeit-Ereignisse direkt für den Docker-Daemon (dockerd ). Dies kann bei der Überwachung bestimmter Ereignisse helfen, beispielsweise wenn ein Bild entfernt wurde.

Sehen Sie sich den Screenshot unten an, um dies besser zu verstehen.

2. Der Kontext-Unterbefehl

Dies ist ein weiterer schöner Unterbefehl, den meines Wissens nicht viele kennen. Ein Kontext für die Ausführung eines beliebigen Docker-Befehls besteht aus einigen Schlüssel-Wert-Paaren, die den Endpunkt, den Host, möglicherweise eine Konfigurationsdatei usw. umfassen, aber nicht darauf beschränkt sind.

Sobald Sie einen Kontext erstellt haben, kann er später wiederverwendet werden.

Einer der größten praktischen Anwendungsfälle, insbesondere für mich, war das Erstellen separater Kontexte für die einzelnen Server, auf denen Docker ausgeführt wird. Da sich der Großteil meiner Arbeit darum dreht, verwende ich, anstatt mich jedes Mal beim Server anzumelden, meinen lokalen Client mit dem Remove-Docker-Server über SSH.

So richten Sie den Fernzugriff auf den Docker-Daemon ein [Ausführliche Anleitung]Sie möchten nicht per SSH auf den Remote-Server zugreifen und dann Docker-Befehle ausführen? Sie können einen Remote-Docker-Zugriff einrichten, der auch andere Vorteile bietet. Linux-Handbuch Debdut Chakraborty

Lassen Sie mich Ihnen zeigen, wie ich dies mit Docker-Kontexten erreiche.

Zuerst habe ich einen Server auf Linode bereitgestellt, auf dem Docker läuft. Wenn ich ohne Kontexte auf den Remote-Docker-Daemon zugreifen würde, würde ich einen Befehl wie den folgenden verwenden

➟ docker --host ssh://[email protected]:7770 ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

Um also auf den Remote-Daemon zuzugreifen, müsste ich entweder docker aliasieren an docker --host ssh://[email protected]:7770 , oder verwenden Sie eine Umgebungsvariable DOCKER_HOST . Diese erschweren aber den Wechsel zu anderen Hosts sehr. Eine einfachere Alternative besteht darin, einfach einen Kontext zu erstellen.

Der folgende Befehl erstellt einen Kontext namens remote , für einen Docker-Endpunkt mit einem anderen Host als dem lokalen.

docker context create remote --description "Remote docker server" --docker "host=ssh://[email protected]:7770"

Die Ausgabe sieht so aus:

➟ docker context create remote --description "Remote docker server" --docker "host=ssh://[email protected]:7770"
remote
Successfully created context "remote"

Jetzt können Sie entweder das -c verwenden Option mit docker Wenn Sie etwas schnell überprüfen möchten oder für wiederholte Operationen, ändern Sie den Kontext in diesen neuen.

Mit dem -c Möglichkeit:

➟ docker -c remote ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

Verwenden Sie im docker context use [CONTEXT_NAME] :

➟ docker context use remote
remote
Current context is now "remote"
~ 
➟ docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

Um aus dem Kontext herauszukommen, verwenden Sie use Unterbefehl mit default für den Kontextnamen:

➟ docker context use default
default
Current context is now "default"
~ 
➟ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

3. Der Unterbefehl Pause &Fortsetzen

Große Bereitstellungen (Anwendungen) sind jetzt in mehrere Komponenten unterteilt, besser bekannt als Microservices. Wenn Sie sie mit etwas wie Docker-Compose bereitstellen, passiert es manchmal, dass eine Komponente vor der/denjenigen gestartet wird, von der sie abhängt. Dies ist ein Problem, da diese Komponente nicht gestartet werden kann, da ihre Abhängigkeit (oder Abhängigkeiten) noch nicht gestartet wurde.

Sie können dieses Problem entschärfen, indem Sie Neustartrichtlinien in Docker verwenden, aber sie verhindern nicht, dass das Protokoll mit fehlgeschlagenen Versuchen überschwemmt wird. Was ich am Anfang gemacht habe, war einfach den Container/Dienst zu stoppen, bis die Abhängigkeit vollständig hochgefahren ist.

Eine bessere Möglichkeit besteht darin, den Container einfach für eine Weile anzuhalten, und sobald die erforderlichen Dienste erfolgreich ausgeführt wurden, können Sie den Container wieder anhalten, und alles wird von dort aus weitergehen.

Obwohl Container schnell hochfahren, ist dies eine noch schnellere Möglichkeit, einem solchen Problem zu begegnen.

Die Syntax für pause und unpause ist ganz einfach.

docker pause [CONTAINER_NAME|ID]
docker unpause [CONTAINER_NAME|ID]

Damit ist dieser Artikel vorerst abgeschlossen. Wenn ich weitere solche Befehle nützlich oder interessant finde, werde ich diesen Artikel entsprechend aktualisieren.

Haben Sie einen Docker-Befehl, der Ihrer Meinung nach auf dieser Liste hätte stehen sollen? Lass es mich in den Kommentaren unten wissen.


Docker
  1. 3 Linux-Befehle zum Herunterfahren des Systems und Sie können es einfach tun

  2. Einige DOCKER-Befehle

  3. 20 Beispiele für OpenSSL-Befehle, die Sie kennen müssen

  4. Schnellreferenz-Spickzettel für Docker-Befehle

  5. Docker installieren (Debian-basiertes Betriebssystem)

Docker-Befehle zum Verwalten des Containerlebenszyklus (Definitive Guide)

3 eher unbekannte Docker-Befehle, die Ihnen in einer Vielzahl von Szenarien helfen werden

100 nützliche Vim-Befehle, die Sie jeden Tag brauchen werden

Beste Kommentarsysteme für Websites, die Sie selbst hosten können

20 Haupt-Linux-Befehle, die Sie täglich benötigen

5 beste Kriegsspiele für Linux, die Sie süchtig machen werden