[英]How to run one-off Docker containers locally (triggered from within a container)
在 Heroku 上托管应用程序时,我经常通过 Heroku API 从代码中触发一次性 dynos,以便在后台执行繁重的工作。 我最近在 AWS 上设置了一些堆栈,并使用 AWS ECS 运行任务遵循了类似的模式。
我没有为此使用长时间运行的队列工作器,因为硬件资源根据特定任务而有很大差异,并且通常工作负载出现在高峰期。
对于本地开发,我通常通过在正在运行的容器中执行后台任务或从控制台手动触发后台命令来跳过这个主题。 在本地运行一次性容器的好方法是什么?
ECS 支持计划任务,如果您知道计划的高峰时间,您可以使用计划任务按计划启动 fargate 容器。
如果你不这样做,我们所做的是编写一个小的 API Gateway -> Lambda 函数,它基本上动态地启动 Fargate 容器,其中包含在 POST 中定义的一些变量到 API Gateway 端点,如 CPU/Mem/port 等......或者 pre -create 任务定义并将任务定义传递给 api,如果您知道容器的大部分“设置”应该是什么,这是另一种选择。
您可以简单地从容器内部调用 ECS RunTask API调用。
您所需要的只是设置 ECS 任务角色以拥有 runtask 权限,并在容器中拥有 aws cli 或任何 aws sdk 来调用 runtask 调用。
您可以将 docker socket 作为卷传递
volumes:
- /var/run/docker.sock:/var/run/docker.sock
之后,您可以在容器内运行 docker 命令,它们将由主机上的 docker 执行。
特别是你可以运行
docker run ...
或者
docker start ...
(可能您必须通过Dockerfile
命令在容器中安装Dockerfile
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.