在没有 运行 的情况下部署 Azure 容器

Deploying Azure container s without running them

我是 Azure 中 运行ning 容器的新手,我对下面的用例感到困惑, 如果您觉得我错误地使用了容器,请随时给我另一种方法。

核心问题:我无法/不知道如何通过命令行或 ARM 模板部署创建处于“已停止”状态的容器实例

长读用例:

我创建了一个 docker 图像,运行 是一个 python 工作。

该作业需要每天 运行 并通过数据工厂触发。数据工厂将确定环境,设置 docker 命令,更新容器镜像,然后通过批处理帐户执行容器。作业本身执行 api 调用并将一些数据写入 sql。这部分工作正常,容器状态变为 运行ning 然后停止(我关闭自动重启)

在 Azure DevOps 中,我有一个构建作业映像并将其存储在 azure 存储库中的管道。这很好用。

因为我需要一个容器实例作为资源组中的资源,所以我决定将它们放入我的 infra ARM 模板中。问题:使用 DevOps / Arm 模板部署部署容器时, 它部署并 运行s 作业实例,这不是很好,我希望在“停止”状态下创建容器。这样做的原因是作业以其他方式将数据写入我们的数据库,这是不需要的。

我想知道最好的方法是什么/最好的指导方针是什么,我考虑过这两种情况,但对于这两种情况,我的直觉都说不。

场景 1:拥有一个全时 运行ning 容器(让它执行 bin/bash)并使用“az container exec”传递命令。 为什么我不想这样做:我目前每个环境都有一个图像,该图像具有该环境的确切工作,而且我看不到一直触发 3 个备用容器 运行ning 的用处每天一次

场景 2:不通过 DevOps 处理容器实例创建,而是忽略问题并使用数据工厂和批处理帐户创建它。这意味着,当作业被触发时,它将创建(因此 运行 容器)。随后,我可以在使用后删除它。

为什么我不想这样做:我将容器实例视为基础设施的一部分(因为它是您在资源组中部署的东西,如果我的观点有误,请纠正我)所以在那从某种意义上说,通过计划的数据工厂作业管理资源看起来不太好,是一种克服无法在停止状态下部署容器实例的问题的技巧。


# set base image (host OS)
FROM python:3.7-buster
# Argument for environment selection
ARG environment
ENV environment ${environment}
# set the working directory in the container
WORKDIR /

# copy the dependencies file to the working directory
COPY requirements.txt .

# install FreeTDS and dependencies
RUN apt-get update && apt-get -y install apt-transport-https curl
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN exit
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get -y install msodbcsql17
RUN apt-get install unixodbc-dev
RUN pip install pyodbc
RUN pip install -r requirements.txt

# copy the content of the local src directory to the working directory
COPY /src .

# command to run on container start
CMD python "./my_data_job.py" "./my_config.ini" ${environment}

对于 Azure 容器实例,容器组将始终处于 运行ning 状态,直到您停止它。但是它里面的容器可以处于终止状态。事实上,如果你的镜像是一次性镜像,那么当作业完成时,容器就会处于终止状态。您可以根据需要使用 CLI 命令 az container exec 再次 运行 作业。

因此无法在停止状态下创建 ACI。也许你可以使用 AKS,为不同的环境创建不同的部署,当你需要一个容器来 运行 作业时,然后扩展到一个副本。当你不需要容器时,你可以缩小到零。