Docker-Nutzung muss gestoppt werden 3.1 Alle Container löschen docker rm `docker ps -a -q`
4. Docker-Stopp-ID (Container-ID) Stoppen Sie die Ausführung des Containers
5. Docker-Rmi-ID (Spiegel-ID) Löschen Sie das Bild 6 . docker pull ubuntu:16.04 (Bildname: Versionsnummer) Laden Sie das Bild herunter 7. docker run -it ubuntu:16.04 Erstellen und führen Sie den Container aus -t bedeutet, ein Pseudo-Terminal oder Terminal im neuen Container anzugeben - i bedeutet, dass wir mit (stdin) im Container interagieren dürfen -p gibt den zugeordneten Port an -d führt den Container im Hintergrund aus und druckt die Container-ID 7.1 Docker Run -dit ubuntu:16.04 Erstellen und den Container im Hintergrund ausführen 7.2 docker run -ditp 8080:8080 (Host-Port: Container-Port) ubuntu:16.04 Erstellen Sie den Container im Hintergrund, führen Sie ihn aus und ordnen Sie den Port des Containers zu 8. Docker-Attach-ID ( Container-ID) Betreten Sie die laufende Containerumgebung 9. Exit Container 9.1 Exit verlässt den Container direkt und beendet die Ausführung des Containers 9.2 [Strg+P]+[Strg+Q] (Tastenkombination) verlässt den Container, aber beendet nicht die Ausführung des Containers 10. Docker Commit -m' Versionsidentifikation ' id (Container-ID) ubuntu:16.04 (Image und Versionsnummer) Senden Sie das Image und generieren Sie das Image (Sie können diesen Befehl verwenden, um den erstellten Container zu verpacken in ein neues Bild umwandeln oder das Originalbild überschreiben (d. h. den ursprünglichen Bildinhalt ändern, generieren). Wenn der Bildname mit der Versionsnummer übereinstimmt, kann er direkt überschrieben werden Der Nginx-Beamte gibt tatsächlich Anweisungen zum Rotieren von Protokolldateien: Um Protokolldateien zu rotieren, müssen sie zuerst umbenannt werden. Anschließend sollte das USR1-Signal an den Masterprozess gesendet werden Öffnen Sie alle aktuell geöffneten Protokolldateien erneut und weisen Sie ihnen einen nicht privilegierten Benutzer zu, unter dem die Arbeitsprozesse ausgeführt werden. Als Eigentümer schließt der Masterprozess nach erfolgreichem erneuten Öffnen alle geöffneten Dateien und sendet die Nachricht an den Arbeitsprozess, um sie dazu aufzufordern Durch das erneute Öffnen von Dateien werden auch neue Dateien geöffnet und alte Dateien sofort geschlossen, sodass alte Dateien fast sofort für die Nachbearbeitung, beispielsweise für die Komprimierung, verfügbar sind.Die allgemeine Idee dieser Beschreibung ist:
•Benennen Sie zuerst die alte Protokolldatei um•Senden Sie dann das usr1-Signal an den Nginx-Masterprozess
•Der Nginx-Masterprozess empfängt das Signal. Dann werden wir einige Verarbeitungen durchführen und dann den Arbeitsprozess bitten, die Protokolldatei erneut zu öffnen• Der Arbeitsprozess öffnet eine neue Protokolldatei und schließt die alte Protokolldatei
Tatsächlich sind die einzigen Arbeiten, die wir wirklich erledigen müssen, die ersten beiden Punkte!
Angenommen, Docker wurde in Ihrem System installiert, führen wir hier direkt einen Nginx-Container aus:
$ docker run -d \ -p 80:80 \ -v $(pwd)/logs/nginx:/var/log/nginx \ --restart=always \ --name=mynginx \ nginx:1.11.3
Beachten Sie, dass wir die Protokolle von Nginx an das Protokollverzeichnis im aktuellen Verzeichnis gebunden und gemountet haben.
Speichern Sie den folgenden Inhalt in der Datei test.sh:#!/bin/bash for ((i=1;i<=100000;i++)) do curl http://localhost > /dev/null sleep 1 done
Skript zum Erstellen eines fortlaufenden Protokolls
Erstellen Sie die Datei „rotatelog.sh“ mit folgendem Inhalt:
#!/bin/bash getdatestring() { tz='asia/chongqing' date "+%y%m%d%h%m" } datestring=$(getdatestring) mv /var/log/nginx/access.log /var/log/nginx/access.${datestring}.log mv /var/log/nginx/error.log /var/log/nginx/error.${datestring}.log kill -usr1 `cat /var/run/nginx.pid`
Die Funktion „getdatestring“ nimmt die aktuelle Zeit und formatiert sie in eine Zeichenfolge, z. B. „201807241310“. mit Datum und Uhrzeit. Beachten Sie, dass die Zeitzone hier durch tz='asia/chongqing' angegeben wird, da das Format standardmäßig UTC-Zeit ist, was seltsam zu verwenden ist (Sie müssen +8 Stunden in Echtzeit berechnen). Die folgenden zwei MV-Befehle werden zum Umbenennen von Protokolldateien verwendet. Senden Sie abschließend das usr1-Signal über den Kill-Befehl an den Nginx-Masterprozess.
$ chmod +x rotatelog.sh $ sudo cp rotatelog.sh $(pwd)/logs/nginx
Unser Nginx läuft in einem Container, also wir brauchen Senden Sie das usr1-Signal an den Nginx-Masterprozess im Container. Daher müssen wir das Skript „rotatelog.sh“ im Mynginx-Container über den Docker-Exec-Befehl ausführen:
$ docker exec mynginx bash /var/log/nginx/rotatelog.sh
Führen Sie das Obige aus Geben Sie den Befehl einmal ein und es wird wie geplant ein Stapel neuer Protokolldateien generiert:
Als nächstes konfigurieren wir diesen Befehl in der geplanten Aufgabe und lassen ihn jeden Morgen um 1 Uhr einmal ausführen. Führen Sie den Befehl crontab -e aus und fügen Sie die folgenden Zeilen am Ende der Datei hinzu:
* 1 * * * docker exec mynginx bash /var/log/nginx/rotatelog.sh
Einfach speichern und beenden. Das Bild unten zeigt den Effekt des Scrollens alle 5 Minuten während des Autorentests:
Warum nicht die Protokolldatei direkt im Host verschieben?
Dies ist theoretisch möglich, da der Inhalt des durch die Bindung bereitgestellten Datenvolumens vom Host und vom Container aus gesehen gleich ist. Aber wenn Sie dies tatsächlich tun, werden Sie wahrscheinlich auf Berechtigungsprobleme stoßen. Auf dem Host-Computer verwenden Sie im Allgemeinen einen normalen Benutzer, während der Eigentümer der im Container generierten Protokolldatei ein spezieller Benutzer ist und anderen Benutzern im Allgemeinen keine Schreib- und Ausführungsberechtigungen erteilt werden:
Natürlich Wenn Sie den Root-Benutzer auf dem Host-Computer verwenden, gibt es kein Problem.
Kann das Signal vom Host-Computer gesendet werden?
Tatsächlich sollte der vollständige Name dieser Frage lauten: Kann ein Signal vom Host an den Nginx-Master-Prozess im Docker-Container gesendet werden?
Die Antwort lautet: Ja.
Wir können das usr1-Signal an Prozess Nr. 1 (Nginx-Master) im Container über den Befehl senden:
$ docker container kill mynginx -s usr
(Diese Methode kann nur das Signal an Prozess Nr. 1 senden):
Kombinieren Sie die beiden oben genannten Als Frage können wir eine andere Möglichkeit schreiben, das Nginx-Protokoll im Docker zu scrollen. Diese Methode erfordert keine Ausführung von Befehlen im Container über den Docker-Exec-Befehl, sondern führt alle Vorgänge auf dem Host-Computer aus:
•Benennen Sie zuerst die Protokolldatei im Container-Datenvolumen um
•Senden Sie sie an Prozess Nr. 1 im Container usr1-Signal
Das obige ist der detaillierte Inhalt vonSo scrollen Sie durch die Nginx-Protokolldatei in Docker. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!