Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
部署Azure容器而不运行它们_Azure_Docker_Containers_Azure Container Instances - Fatal编程技术网

部署Azure容器而不运行它们

部署Azure容器而不运行它们,azure,docker,containers,azure-container-instances,Azure,Docker,Containers,Azure Container Instances,我是Azure中运行容器的新手,我对下面的用例感到困惑, 如果您觉得我错误地使用了容器,请随意给我一个替代方法 核心问题:我无法/不知道如何通过命令行或ARM模板部署创建处于“停止”状态的容器实例 长阅读用例: 我创建了一个运行python作业的docker映像 作业需要每天运行,并通过数据工厂触发。数据工厂将确定环境,设置docker命令,更新容器映像,然后通过批处理帐户执行容器。作业本身执行api调用并将一些数据写入sql。这部分工作正常,容器状态变为运行,然后停止(我关闭了自动重启) 在A

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

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

长阅读用例:

我创建了一个运行python作业的docker映像

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

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

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

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

场景1:拥有一个始终运行的容器(让它执行bin/bash),并使用“az container exec”传递命令。 我不想这样做的原因:我目前有一个针对每个环境的映像,它具有该环境的确切任务,我不认为让3个备用容器一直运行,每天触发一次有什么用处

场景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容器实例,容器组将始终处于运行状态,直到您停止它。但其中的容器可能处于终止状态。事实上,如果您的映像是一次性映像,那么当作业完成时,容器将处于终止状态。您可以使用CLI命令
az container exec
根据需要再次运行作业


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

此问题有任何更新吗?它解决了你的问题吗?或多或少,我知道现在只在需要的时候旋转它们是好的。我告诉我的批处理帐户创建(并运行)容器实例,然后将其删除,从而解决了这个问题。我也和微软的联系人联系过,他们在我的资源组中出现和消失都没有问题,这就是他们缩进的方式。