当我在Heroku上托管应用程序时,我经常通过Heroku API从代码中触发一次性dynos来在后台处理繁重的工作。我最近在AWS上设置了一些堆栈,并通过使用AWS ECS运行任务来遵循类似的模式。
我没有使用长时间运行的队列工作者来完成这个任务,因为硬件资源根据特定的任务而变化很大,通常工作量会在高峰期出现。
对于本地开发,我通常会跳过这个主题,要么在正在运行的容器内执行后台任务,要么手动从控制台触发后台命令。那么,在本地运行一次性容器的好方法是什么?
当我在Heroku上托管应用程序时,我经常通过Heroku API从代码中触发一次性dynos来在后台处理繁重的工作。我最近在AWS上设置了一些堆栈,并通过使用AWS ECS运行任务来遵循类似的模式。
我没有使用长时间运行的队列工作者来完成这个任务,因为硬件资源根据特定的任务而变化很大,通常工作量会在高峰期出现。
对于本地开发,我通常会跳过这个主题,要么在正在运行的容器内执行后台任务,要么手动从控制台触发后台命令。那么,在本地运行一次性容器的好方法是什么?
您可以直接从容器内部调用ECS RunTask API。
您只需要设置ECS任务角色以具有运行任务的权限,并在容器中安装AWS CLI或任何AWS SDK以调用runtask调用即可。
你可以将Docker套接字作为卷传递
volumes:
- /var/run/docker.sock:/var/run/docker.sock
在此之后,您可以在容器内运行Docker命令,并且它们将由主机上的Docker执行。
特别地,您可以运行:
docker run ...
或者
docker start ...
(也许你需要通过 Dockerfile
中的命令在容器中安装 Docker)