如何异步运行Docker命令?

时间:2017-03-05 18:01:38

标签: javascript asynchronous docker api-design

Docker中的当前表单将任何docker命令放入工作队列中,并按顺序(同步)执行一个。这意味着如果您要创建一个包含docker命令(如站起来容器或下载映像)的单线程API(node.js),它将很快得到备份并使docker工作队列超载。我已经走得那么远了。问题是如何重新建模docker以异步处理命令?

我更关心的是获取有关命令状态的更新,或者甚至无法在完成任务时提供回调函数。我的主要目标是能够快速调用docker站起来或大批量执行命令,而不会影响API的响应时间。

一些想法 -

  1. 使用更多VM&#39>水平缩放

    不能有效地利用每个虚拟机。昂贵。不太优雅的解决方案。

    1. 在可用守护进程中初始化更多docker守护进程并平衡任务。
    2. 仍然不是真正的异步。此外,各种docker守护程序无法共享图像等资源。因此,如果您有10个想要运行Ubuntu容器的docker守护进程,那么您将需要10个单独的ubuntu映像,这将占用原始ubuntu映像大小的10倍空间。

      1. 异步Docker客户端 - https://github.com/tulayang/asyncdocker 即使在NIM docker容器上,我也无法启动并运行。此外,它是用NIM编写的。还不完全清楚这是我正在寻找的,或者它是否只是在docker中引用异步http请求。

1 个答案:

答案 0 :(得分:0)

您需要查看以下内容:

  • 注册表:Docker注册表映像可以配置为缓存代理。您的docker守护程序将配置为使用此缓存代理注册表进行图像提取。只有第一个图像提取将从dockerhub下载并且图像将在本地缓存,因此请求相同图像的第二个docker守护程序将几乎立即获得它。您可以使用docker pull registry获取图书馆(官方)图片。

  • Docker Swarm:您正在谈论初始化更多的docker守护进程和平衡任务,这已经使用它提供的Docker Swarm和集成的覆盖网络完成。

  • Kubernetes:Docker Swarm的替代品,具有更多功能和灵活性(也更复杂)