Wie führe ich in Azure einen kurzlebigen Docker-Container nach einem Zeitplan aus?

12

Ich habe ein ziemlich einfaches Unix-Shell-Skript in einem Alpine Linux Docker-Container, der in einer Azure-Container-Registrierung gehostet wird. Eine VM führt dieses Skript mit cron aus:

docker login <snip>
docker pull example.com/bar:latest
docker run  example.com/bar:latest

Kann ich auf die VM verzichten und stattdessen Azure-Dienste verwenden, möglicherweise mit einem Scheduler, der dies auf einer Azure-Containerinstanz ausführt?

Meine Motivation ist es nicht, die VM zu warten und zu bezahlen.

Sijmen Mulder
quelle

Antworten:

10

Azure Container Instances (ACI) sind möglicherweise eine gute Option, wie Sie vorschlagen. Mit diesen können Sie einen Container direkt in Azure ausführen, ohne eine VM verwalten zu müssen, wobei die Zeit, in der der Container verwendet wird, pro Sekunde abgerechnet wird.

Obwohl in einer der Demos in diesem Blog Kubernetes erwähnt wird, besteht die Idee von ACI darin, dass Sie einen Container über die Azure-CLI mit erstellen können az container create, genau wie auf Ihrer lokalen Workstation mit docker create.

Zum Erstellen des Containers können Sie die Azure CLI ( azBefehl, siehe Schnellstartdokumente ) oder die Azure Cloud Shell verwenden.

Sie müssten den Container nach einem Zeitplan von einem anderen Ort aus erstellen / ausführen. Azure-Funktionen sind möglicherweise ein guter Ort, um den Befehl "container create" über eine geplante Funktion auszuführen . Dies unterstützt Bash, PowerShell und andere Sprachen, die alle unter Windows ausgeführt werden.

Wenn Sie weiterhin Docker-Container verwenden möchten, ohne VMs auszuführen oder Kubernetes zu lernen, ist dies möglicherweise eine gute Option.

Alternativ können Sie Ihren gesamten Code in Azure-Funktionen verschieben, dies ist jedoch eine größere Entscheidung.

Update: Januar 2019 - Mit Azure Logic Apps können auch geplante Aufgaben ausgeführt werden.

RichVel
quelle
Ich wusste nicht, dass ich PowerShell oder Bash für Azure-Funktionen verwenden kann! Vielen Dank
Sijmen Mulder
Ja, Sie können jede ausführbare Datei über Azure-Funktionen ausführen. Bash wird in diesem Übersichtsdokument ausdrücklich erwähnt . Informationen zum Aufrufen von PowerShell-Modulen finden Sie in diesem Blog .
RichVel
Es ist üblich, Cloud-Funktionen wie Azure-Funktionen, AWS Lambda usw. zu verwenden, um Installationsskripts auszuführen, mit denen Cloud-Dienste konfiguriert werden (z. B. das Einrichten einer neuen Cloud-Umgebung). Sie können also erwarten, dass alle serverlosen Dienste und Frameworks das Ausführen von Bash oder ähnlichem unterstützen. Traditionell war die erste VM, die Sie einrichten würden, ein "Steuerhost" -Server, auf dem alle Einstellungen aller Umgebungen ausgeführt werden. Wenn Sie ohne Server alle derartigen Skripte ausführen, müssen Sie keinen Host bezahlen. Wenn ein Kontrollserver gehackt wird, verliert er eine Karte Ihrer Umgebungen, alte Skripte und möglicherweise zwischengespeicherte Kennwörter. Serverless Bash ist sicherer.
Simbo1905
Es ist nicht so, dass alle FaaS-Dienste (ohne Server) Bash unterstützen. Tatsächlich unterstützt AWS Lambda Bash nur über benutzerdefinierte Ebenen, eine Funktion, die Ende 2018 hinzugefügt wurde. Sie können diese Open-Source-Ebene verwenden , um das Ausführen von Bash zu vereinfachen. Im Allgemeinen unterstützen serverlose / FaaS-Dienste bestimmte Sprachen, wobei einige Anbieter Möglichkeiten zur Erweiterung dieser Sprachen ermöglichen. Beispielsweise verfügt AWS über Ebenen, und Google verfügt über einen FaaS-Dienst, mit dem jeder Docker-Container ausgeführt werden kann.
RichVel
Der Einfachheit halber, wenn Sie keine Ebenen verwenden möchten - Sie können ein Node / Python-Lambda schreiben, das bash ausführt , ohne Ebenen zu verwenden - siehe Lambdash für ein Beispiel.
RichVel