你怎么能写一个docker守护进程,可以根据需要启动其他docker集装箱?

我已经看到了一些Docker容器如何与主机系统直接通信的选项,但都显得有点偷偷摸摸。 例如,看起来可以启动一个容器,并将容器内的docker可执行文件(使用-v)绑定到主机的docker可执行文件。 可以使用networking协议将消息发送到主机。 它也似乎 – – 特权标志也可以帮助。

这些方法中的每一个似乎都有缺陷和安全问题。 我更大的问题是,如果这个架构甚至是最好的方法。

我们的目标是让docker守护进程运行,轮询正在用作队列的数据库。 (我知道这是在某些方面皱眉,但我们的stream量是非常低的和内部的,这种types的队列性能不是问题。)当docker守护进程检测到有工作要做,它踢开另一个docker集装箱处理这项工作。 那个容器完成后就死了。 每个容器属于一个“系统”,并将在该系统上运行负载。 每个系统只能有一个容器负载运行。

这是一个有意义的范式吗? 这个守护进程是否仅仅是一个主机级进程? 一个Python脚本,而不是一个docker集装箱? Docker的意思是用这种方式吗? 我只是想知道在Docker文档中,它告诉我该怎么做? 毕竟,我的“鬼鬼祟祟”的想法是不是太狡猾?

我明白这里有一个意见的机会。 我正在寻找一些简明的最佳做法。

提前致谢!

我所见过的首选解决scheme是将docker二进制文件安装到容器中,然后将/var/run/docker.sock挂载到容器中。 Dockerfile我有类似的东西:

FROM upsteam:latest ARG DOCKER_GID=999 USER root # install docker RUN curl -sSL https://get.docker.com/ | sh # app setup goes here # configure user with access to docker RUN groupmod -g ${DOCKER_GID} docker && \ usermod -aG docker appuser USER appuser 

然后运行:

 docker run -d --name myapp -v /var/run/docker.sock:/var/run/docker.sock myapp 

这将是最有效的解决scheme,因为您删除了networking带宽。 它可以消除任何networking漏洞,无论是从一个开放的端口,或从您的容器中包括TLS证书,可能会意外泄漏像丢失的备份。