【问题标题】:Deploying Azure container s without running them部署 Azure 容器而不运行它们
【发布时间】:2021-07-26 20:21:11
【问题描述】:

我是在 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}

【问题讨论】:

  • 关于这个问题的任何更新?它解决了你的问题吗?
  • 或多或少,我知道现在只在需要时启动它们是可以的。我通过告诉我的批处理帐户创建(并因此运行)容器实例然后将其删除来解决了这个问题。我还与 Microsoft 的联系人进行了核对,他们在我的资源组中出现和消失的事实没有发现任何问题,这就是他们缩进它的工作方式。

标签: azure docker containers azure-container-instances


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2022-11-30
    • 2021-09-20
    • 2021-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2012-08-29
    相关资源
    最近更新 更多