Ich verwende docker seit einigen Monaten und arbeite daran, verschiedene Serverbilder zu docken. Ein konsistentes Problem ist, dass viele Server Cron-Jobs ausführen müssen. Es gibt eine Menge Diskussionen darüber online (einschließlich Stackoverflow), aber ich verstehe die Mechanik davon nicht vollständig.
Zur Zeit verwende ich die Cron- und Docker-Exec des Hosts in jedem Container, um ein Skript auszuführen. Ich habe eine Konvention über den Namen und den Ort des Skripts erstellt. Alle meine Container haben das gleiche Skript. Dadurch wird vermieden, dass der Cron des Hosts von den Containern abhängt.
Im Prinzip, einmal pro Minute, macht der Cron des Hosts folgendes:
%Vor%Das funktioniert, aber macht die Container vom Host abhängig.
Ich möchte einen Cron-Container erstellen, der in jedem der anderen Container ein Skript startet - aber mir ist nichts von einem "Docker-Exec" bekannt, das von einem Container zum anderen funktioniert.
Die spezifischen Situationen, die ich gerade habe, führen eine Sicherung in einem MySQL-Container aus und führen die Cron-Jobs aus, die Moodle benötigt, um jede Minute ausgeführt zu werden. Irgendwann wird es noch weitere Dinge geben, die ich über Cron erledigen muss. Moodle verwendet Kommandozeilen-PHP-Skripte.
Was ist der "richtige" dockerisierte Weg, um ein Skript von einem Container in einem anderen Container zu starten?
Update : Vielleicht hilft es, meine speziellen Anwendungsfälle zu erwähnen, obwohl es im Laufe der Zeit noch mehr geben wird.
Cron muss derzeit Folgendes tun:
Meine Lösung ist:
Teil meiner Dockerfile
cron
Paket - Paket mit Cron-Daemon rsyslog
package, um die Cron-Task-Ausgabe zu protokollieren mailutils
package, wenn Sie E-Mails von Cron-Aufgaben senden möchten rsyslogd
.crontab
-Datei (mit Ihren Aufgaben) in die tmp-Datei Ich benutze das in meinen Behältern und arbeite sehr gut.
Wenn Sie dieses Paradigma mögen, dann machen Sie eine Dockerfile
pro Cron-Aufgabe. z.B.
Dockerfile
- Hauptprogramm Dockerfile_cron_task_1
- Cron-Task 1 Dockerfile_cron_task_1
- Cron-Task 2 und alle Container erstellen:
%Vor%