Docker und Cron

4. August 2020

Lang: cs en de es

Was mich dazu veranlasst hat, diesen Artikel zu schreiben, waren meine Erfahrungen mit Projekten, die Docker verwenden, aber nicht so, wie sie sollten. Verwenden Sie Docker und möchten Sie regelmäßige Aufträge mit Cron ausführen? In diesem Artikel beschreibe ich, wie man Cron in einem Docker-Container ausführt.

Ich hatte zum Beispiel ein Projekt, bei dem das Projekt nach einem Server-Neustart nicht mehr lief, und unter anderem lief Cron nicht mehr. Oder ein anderes Projekt, bei dem Cron nicht funktionierende Aufgaben ausführte, aber niemand wusste davon.

Wenn du gerade erst mit Docker anfängst, dann schau dir den Artikel Wie man mit Docker anfängt an.

Docker und Dienste

Docker ist die Virtualisierung von Containern. Und wenn man es benutzt, dokumentiert man das Projekt auch selbst. Um die Möglichkeiten und Vorteile der Container-Virtualisierung zu nutzen: Übersicht, Unabhängigkeit, Anpassbarkeit, horizontale Skalierung, brauchen Sie nur ein Hauptprogramm (Dienst), das in jedem Container läuft. Ein Programm kann mehrere Threads oder Prozesse haben. So kann man sich beispielsweise einmal in einen Container einloggen und andere Programme ausführen, aber das Hauptprogramm wird überwacht, um zu sehen, ob es läuft.
Indem man identische Container und Anwendungen laufen lässt, kann man horizontal skalieren und eine größere Leistung der Anwendung erreichen.
Eine Situation, in der neben dem Hauptprogramm ein weiterer Dienst (z.B. cron) im Container läuft, ist also falsch.

Docker-Bild

Das vorgefertigte Basis-Image führt nur einen Dienst aus. Ja, es ist möglich, das Image so zu modifizieren, dass neben dem Hauptprogramm auch andere Programme (z.B. cron) automatisch gestartet werden, aber wenn das sekundäre Programm nicht läuft, weiß die Laufzeitumgebung (Docker, Docker Swarm, Kubernetes) nichts von dem Problem, also Sie auch nicht, es sei denn, Sie ändern die Anwendung oder den Container anderweitig.
Vor allem aber überwacht die Laufzeitumgebung so die laufenden Container - zum Beispiel Kubernetes. Außerdem ist es unwahrscheinlich, dass ein gegebenes Lösungsdesign eine Skalierung ohne weitere Änderungen ermöglicht.
Ja, es wird Anwendungsfälle geben, in denen es angebracht ist, Cron im selben Container laufen zu lassen, aber das wird ein Fall sein, der von den Besonderheiten der Anwendung/des Projekts abhängen.

Was ist Cron

Unter Cron versteht man die regelmäßige Ausführung von Programmen oder schreiben Konfigurationen, die typisch für Cron sind. Von der Implementierung her ist ein Cron ein Programm, das beim Start von Unix-Systemen automatisch läuft, ständig läuft und dann periodisch Aufgaben entsprechend der angegebenen Konfiguration ausführt.

Wie führe ich Cron-Jobs in Docker aus?

Um Cron in Docker laufen zu lassen, muss Cron installiert, ausgeführt und konfiguriert werden.

Wenn wir cron in Docker laufen lassen, können wir von einem beliebigen Image starten, das entweder einfach oder bereits die notwendigen Komponenten. Sie installieren cron in dieses Image und konfigurieren das Docker-Image, um cron auszuführen.

Als nächstes ersetzen Sie die Datei /etc/crontab durch Ihre eigene Konfiguration für cron.

Die Dockerdatei für cron, basierend auf dem Basis-Debian-Image, könnte wie folgt aussehen:

FROM debian:buster
MAINTAINER Bc. Josef Jebavý

#cron
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections \
 && apt-get update && apt install cron curl wget jq -y && apt-get clean

# andere Komponenten

COPY crontab /etc/crontab
CMD [ "/usr/sbin/cron","-f","-L /dev/stdout" ]

Das Ergebnis ist ein Image, von dem aus man einen Container startet, der einen Cron ausführt, der unabhängig von den anderen Diensten/Applikationen ist. Wenn cron abstürzt, werden Sie über den Absturz benachrichtigt und in der Regel wird der Container in Kubernetes automatisch neu gestartet.
Die resultierenden gruppierten Anwendungskomponenten sind dann so, dass viele separate Container verschiedene Teile der Anwendung ausführen können, einige mehrfach, und ein einziger separater Container, der Cron nebenher laufen lässt.

Sie können die Konfigurationsdatei für cron auch beim Start des Containers einbinden. Das ist zum Beispiel nützlich, wenn Sie die Konfiguration in einer Entwicklungsumgebung debuggen müssen, weil Sie dann nicht ständig einen neuen Container bauen und starten müssen. einen neuen Container bauen und starten.

Beispiel für eine Cron-Datei:

# crontab copy to docker
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

PHP7=/usr/bin/php7.2
PHP5=/usr/bin/php5.6
# m h dom mon dow user Befehl
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etcocron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

* * * * * root date >> /var/www/html/log/cron-test.txt

1.31 * * * * root ( ${PHP5} /var/www/html/cron/10-update.php) >> /var/www/html/log/cron.log 2>&1

Benutzerdefinierte Lösungen

Da ein Programmierer ein Experte für Softwareentwicklung ist, sollte man die Erstellung von Containern und den Aufbau einer laufenden Produktionsumgebung Linux- und Docker-Experten überlassen.

Články na podobné téma

VMware-Lizenzierungsänderung
Ausführen von Microsoft SQL Server unter Linux
Sicherung: der Proxmox Backup Server
Linux als Router und Firewall
Hochladen eines Docker-Images in die Docker-Registry
Linux: Verwaltung logischer Datenträger
Linux-Software-RAID
Ausführen einer Webanwendung hinter einem Proxy
Migration von Postfächern
Mehrstufige Docker-Erstellung
Sichern Ihrer Daten durch Einschalten des Computers
Podman
Importieren von Windows in die Proxmox-Virtualisierung
Docker und PHP-Mail
Proxmox-Virtualisierung
Lenovo ThinkPad X1 Carbon: Inbetriebnahme des LTE-Modems EM7544
Yocto-Projekt: Erstellen eines eigenen Betriebssystems für eingebettete Geräte
Vorbereiten eines Linux-Servers für die Ausführung einer Webanwendung in Python
Wie man eine schlechte Dateifreigabeleistung in Docker behebt
Wie man Docker richtig einsetzt
Installation von Linux auf einem dedizierten HPE ProLiant DL320e Server
Wie man eine Webanwendung einem Belastungstest unterzieht
Warum das JFS-Dateisystem verwenden
Booten von einer 4TB-Festplatte mit GTP unter UEFI
Btrfs-Dateisystem
Raspberry PI
WINE - Ausführen von Windous Programmen unter Linux
GNU/Linux-Betriebssystem

Newsletter

Wenn Sie daran interessiert sind, gelegentlich Neuigkeiten per E-Mail zu erhalten.
Sie können sich registrieren, indem Sie Ihre E-Mail-Adresse eingeben News-Abonnement.


+