Sur Azure, comment exécuter un conteneur Docker de courte durée selon une planification?


12

J'ai un script shell Unix assez simple empaqueté dans un conteneur Alpine Linux Docker hébergé sur un registre de conteneurs Azure. Une machine virtuelle exécute ce script avec cron:

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

Puis-je me passer de la machine virtuelle et utiliser les services Azure à la place, peut-être avec une sorte de planificateur exécutant cela sur une instance de conteneur Azure?

Ma motivation n'est pas de vouloir entretenir et payer la VM.

Réponses:


10

Les instances de conteneur Azure (ACI) peuvent être une bonne option, comme vous le suggérez. Ceux-ci vous permettent d'exécuter un conteneur directement sur Azure, sans avoir à gérer une machine virtuelle, avec une facturation par seconde pour la durée d'utilisation du conteneur.

Bien que l'une des démos de ce blog mentionne Kubernetes, l'idée d'ACI est que vous pouvez créer un conteneur via Azure CLI avec az container create, tout comme sur votre poste de travail local avec docker create.

Pour créer le conteneur, vous pouvez utiliser Azure CLI ( azcommande, voir documentation de démarrage rapide ) ou Azure Cloud Shell.

Vous auriez besoin de créer / exécuter le conteneur selon un calendrier ailleurs - Azure Functions pourrait être un bon endroit pour exécuter la commande "container create" à partir d'une fonction planifiée . Cela prend en charge bash, PowerShell et d'autres langues , toutes fonctionnant sous Windows.

Si vous souhaitez continuer à utiliser des conteneurs Docker sans exécuter de machines virtuelles ni apprendre Kubernetes, cela peut être une bonne option.

Alternativement, vous pouvez déplacer tout votre code dans Azure Functions, mais c'est une décision plus importante.

Mise à jour: janvier 2019 - Azure Logic Apps peut également être utilisé pour exécuter des tâches planifiées .


Je ne savais pas que je pouvais utiliser PowerShell ou Bash pour les fonctions Azure! Merci
Sijmen Mulder

Oui, vous pouvez exécuter n'importe quel exécutable à partir d'Azure Functions, et bash est explicitement mentionné dans ce document de présentation . Pour appeler des modules PowerShell, consultez ce blog .
RichVel

Il est courant d'utiliser des fonctions cloud telles que Azure Functions, AWS Lambda, etc. pour exécuter des scripts d'installation qui configurent les services cloud (par exemple, configurer un nouvel environnement cloud). Vous pouvez donc vous attendre à ce que tous les services et frameworks sans serveur prennent en charge l'exécution de bash ou similaire. Traditionnellement, la première machine virtuelle que vous configuriez était un serveur «hôte de contrôle» à utiliser comme emplacement pour exécuter toutes les configurations de tous les environnements. Aller sans serveur pour exécuter tous ces scripts ne signifie aucun hôte à payer. Un serveur de contrôle s'il est piraté laisse échapper une carte de vos environnements, d'anciens scripts et éventuellement des mots de passe mis en cache. Bash sans serveur est plus sécurisé.
simbo1905

Ce n'est pas le cas que tous les services FaaS (sans serveur) prennent en charge bash. En fait, AWS Lambda prend uniquement en charge bash via des couches personnalisées, une fonctionnalité ajoutée à la fin de 2018 - vous pouvez utiliser cette couche open source pour simplifier l'exécution de bash. En règle générale, les services sans serveur / FaaS prennent en charge des langues spécifiques, certains fournisseurs offrant des moyens d'étendre cela - par exemple, AWS a des couches et Google a un service FaaS qui permet à n'importe quel conteneur Docker de s'exécuter.
RichVel

Pour plus de simplicité si vous ne souhaitez pas utiliser les couches - vous pouvez écrire un Lambda Node / Python qui exécute bash, sans utiliser les couches - voir lambdash pour un exemple.
RichVel

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.