En Azure, ¿cómo ejecuto un contenedor Docker de corta duración en un horario?

12

Tengo un script de shell de Unix bastante simple empaquetado en un contenedor Alpine Linux Docker alojado en un registro de contenedor de Azure. Una máquina virtual ejecuta este script con cron:

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

¿Puedo prescindir de la VM y usar los servicios de Azure en su lugar, tal vez con algún tipo de planificador que lo ejecute en una instancia de Azure Container?

Mi motivación es no querer mantener y pagar la VM.

Sijmen Mulder
fuente

Respuestas:

10

Las instancias de contenedor de Azure (ACI) pueden ser una buena opción, como sugiere. Estos le permiten ejecutar un contenedor directamente en Azure, sin tener que administrar una VM, con facturación por segundo por el tiempo que se usa el contenedor.

Aunque una de las demostraciones en ese blog menciona a Kubernetes, la idea de ACI es que puede crear un contenedor a través de la CLI de Azure con az container create, al igual que en su estación de trabajo local docker create.

Para crear el contenedor, puede usar la CLI de Azure ( azcomando, ver documentos de inicio rápido ) o Azure Cloud Shell.

Necesitaría crear / ejecutar el contenedor en una programación desde otro lugar: Azure Functions podría ser un buen lugar para ejecutar el comando "contenedor crear" desde una función programada . Esto admite bash, PowerShell y otros idiomas , todos ejecutados en Windows.

Si desea seguir usando contenedores Docker sin ejecutar máquinas virtuales o aprender Kubernetes, esta podría ser una buena opción.

Alternativamente, puede mover todo su código a Azure Functions, pero esa es una decisión más importante.

Actualización: enero de 2019: las aplicaciones Azure Logic también se pueden usar para ejecutar tareas programadas .

RichVel
fuente
¡No sabía que podía usar PowerShell o Bash para Azure Functions! Gracias
Sijmen Mulder
Sí, puede ejecutar cualquier ejecutable desde Azure Functions, y bash se menciona explícitamente en este documento general . Para llamar a los módulos de PowerShell, consulte este blog .
RichVel
Es común usar funciones en la nube como Azure Functions, AWS Lambda, etc. para ejecutar scripts de instalación que configuran servicios en la nube (por ejemplo, configurar un nuevo entorno en la nube). Por lo tanto, puede esperar que todos los marcos y servicios sin servidor admitan la ejecución de bash o similar. Tradicionalmente, la primera máquina virtual que configuraría era un servidor de "host de control" para usar como el lugar para ejecutar toda la configuración de todos los entornos. Ir sin servidor para ejecutar todos estos scripts significa que no hay un host por el que pagar. Si se piratea un servidor de control, se filtra un mapa de sus entornos, scripts antiguos y posiblemente contraseñas almacenadas en caché. Bash sin servidor es más seguro.
simbo1905
No es el caso de que todos los servicios FaaS (sin servidor) admitan bash. De hecho, AWS Lambda solo admite bash a través de capas personalizadas, una característica agregada a fines de 2018; puede usar esta capa de código abierto para simplificar la ejecución de bash. En general, los servicios sin servidor / FaaS admiten lenguajes específicos, con algunos proveedores que permiten formas de extender esto, por ejemplo, AWS tiene Capas y Google tiene un servicio FaaS que permite que se ejecute cualquier contenedor Docker.
RichVel
Para simplificar si no desea usar Capas, puede escribir un Nodo / Python Lambda que ejecute bash, sin usar Capas, vea lambdash para ver un ejemplo.
RichVel