Docker-Nutzung
1. Docker PS zum Anzeigen laufender Container
2. Docker-Bilder zum Anzeigen von Docker-Bildern
3. Docker-RM-ID (Container-ID) Löschen Sie den Container (die Container-ID kann über Docker PS angezeigt werden, der Container muss gestoppt werden, bevor er gelöscht werden kann)
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 das Bild
#🎜🎜 # 6. docker pull ubuntu:16.04 (Bildname: Versionsnummer) Laden Sie das Bild herunter 7. docker run -it ubuntu:16.04 Erstellen Sie den Container-Container und führen Sie ihn aus -t bedeutet, ein Pseudoterminal oder Terminal im neuen Container anzugeben -i bedeutet, dass wir mit (stdin) im Container interagieren können#🎜 🎜# -p gibt den zugeordneten Port an
# 🎜🎜# -d Führen Sie den Container im Hintergrund aus und drucken Sie die Container-ID 7.1 docker run -dit ubuntu:16.04 Erstellen Sie den Container und führen Sie ihn aus im Hintergrund 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. Verlassen Sie den Container 9.1 Beenden Verlassen Sie den Container direkt und beenden Sie die Ausführung des Containers#🎜 🎜#9.2 [Strg+P]+[Strg+Q] (Tastenkombination) Verlassen Sie den Container. Der ausgeführte Container wird jedoch nicht beendet.
10. docker commit -m'version Identification' 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 das Image zu erstellen). Gute Container werden in ein neues Image gepackt oder überschreiben das Original-Image (d. h , ändern Sie den ursprünglichen Bildinhalt, und der generierte Bildname ist derselbe wie die Versionsnummer und kann direkt überschrieben werden))
Okay, jeder kennt Docker Werfen wir einen Blick darauf. nginx hat das Rollproblem des Protokolls selbst nicht gelöst, sondern den Ball zum Benutzer geworfen. In der Regel können Sie für diese Aufgabe das Tool „logrotate“ verwenden oder, wenn Sie möchten, verschiedene Skripts schreiben, um dieselbe Aufgabe auszuführen. Der Autor dieses Artikels stellt vor, wie man durch die in Docker ausgeführte Nginx-Protokolldatei scrollt (das Bild unten stammt aus dem Internet).Gedanken
nginx Der Beamte gab tatsächlich Anweisungen zum Rollen des Baumstamms: # 🎜🎜#
rotierende ProtokolldateienUm Protokolldateien zu rotieren, müssen sie zuerst umbenannt werden, danach wird das usr1-Signal an den Masterprozess gesendet Ö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 verfügbar sind, z. B. für die Komprimierung.
dieser Absatz Die allgemeine Beschreibung lautet:
•Benennen Sie zuerst die alte Protokolldatei um
•Senden Sie dann das usr1-Signal an den Nginx-Masterprozess
•Der Nginx-Masterprozess empfängt die signal Danach wird eine gewisse Verarbeitung durchgeführt, und dann wird der Arbeitsprozess aufgefordert, die Protokolldatei erneut zu öffnen
Tatsächlich ist die einzige Arbeit, die wir wirklich erledigen müssen, zwei Punkte vorher!
Erstellen Sie eine Testumgebung
Vorausgesetzt, dass Docker in Ihrem System installiert wurde, 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
Speichern Sie den folgenden Inhalt in der test.sh-Datei:
#!/bin/bash for ((i=1;i<=100000;i++)) do curl http://localhost > /dev/null sleep 1 done
Führen Sie dann dieses Skript aus, um die Generierung kontinuierlicher Protokolldatensätze zu simulieren.
Skript zum Erstellen eines fortlaufenden Protokolls
#!/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`
$ chmod +x rotatelog.sh $ sudo cp rotatelog.sh $(pwd)/logs/nginx
Geplant Ausführung Rollvorgang
Unser Nginx läuft in einem Container, daher müssen wir das usr1-Signal an den Nginx-Masterprozess im Container senden. Daher müssen wir das Skript „rotatelog.sh“ im Mynginx-Container über den Docker-Exec-Befehl ausführen:Durch einmaliges Ausführen des obigen Befehls wird ein neuer generiert Stapel neuer Dateien wie geplant Protokolldatei:
Lassen Sie uns diesen Befehl in einer geplanten Aufgabe konfigurieren und ihn jeden Morgen um 1 Uhr ausführen lassen. 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
* 1 * * * docker exec mynginx bash /var/log/nginx/rotatelog.sh
保存并退出就可以了。下图是笔者测试过程中每 5 分钟滚动一次的效果:
为什么不在宿主机中直接 mv 日志文件?
理论上这么做是可以的,因为通过绑定挂载的数据卷中的内容从宿主机上看和从容器中看都是一样的。但是真正这么做的时候你很可能碰到权限问题。在宿主机中,你一般使用的是普通用户,而在容器中产生的日志文件的所有者是会是特殊的用户,并且一般不会给其它用户写和执行的权限:
当然,如果你在宿主机中使用的是 root 用户就不会有问题。
能从宿主机中发送的信号吗?
其实这个问题的全称应该是:能从宿主机中给 docker 容器中的 nginx master 进程发送信号吗?
答案是,可以的。
笔者这一文中介绍了容器中信号的捕获问题,感兴趣的朋友可以去看看。在那篇文章中我们介绍了 docker 向容器中进程发送信号的 kill 命令。我们可以通过命令:
$ docker container kill mynginx -s usr
🎜🎜Natürlich, wenn Sie es im Host verwenden Wenn Sie der Root-Benutzer sind, wird es kein Problem geben. 🎜🎜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. 🎜🎜🎜Der Autor stellt in diesem Artikel das Problem der Signalerfassung in Containern vor. In diesem Artikel haben wir den Kill-Befehl von Docker vorgestellt, der Signale an Prozesse in einem Container sendet. Wir können den Befehl verwenden: 🎜🎜$ docker container kill mynginx -s usr
🎜🎜, um das usr1-Signal an Prozess Nr. 1 (Nginx-Master) im Container zu senden (diese Methode kann nur das Signal senden). zu Prozess Nr. 1): 🎜🎜🎜🎜🎜Durch die Kombination der beiden oben genannten Fragen 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 Nginx-Protokolle im Docker. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!