Docker-容器间脚本执行

时间:2018-07-19 21:14:23

标签: docker

当前,我的Web应用程序正在服务器上运行,所有服务(nginx,php等)都直接安装在主机系统中。现在,我想使用docker将这些不同的服务分离到特定的容器中。 Nginx和php-fpm运行正常。但是在Web应用程序中,可以生成pdfs,这是使用wkhtmltopdf完成的,并且由于我要遵循“每个容器一个服务”的模式,因此我想添加一个附加容器,其中包含wkhtmltopdf并负责此特定服务。 问题是:我该怎么做?如何从php-fpm容器中调用wkhtmltopdf二进制文件?

一种解决方案是共享docker.socket,但这是一个很大的安全漏洞,所以我真的不喜欢它。

那么,还有其他方法可以实现这一目标吗?而且,这种“微服务分离”不是docker的主要目的/目标之一吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您不能直接将二进制文件从一个容器调用到另一个容器。 (“文件系统隔离”也是Docker的主要目标。)

在这种情况下,您可能会将“生成PDF”视为服务所采取的一种操作,而不是将其本身作为单独的服务,因此将二进制文件作为子过程执行是达到目的的一种手段。由于mkhtmltopdf可能不是一个长期运行的过程,因此甚至不会引起任何麻烦,您将为每个请求启动一次,并且直到子过程运行完成才响应。我会将其安装或包含在打包PHP应用程序的Dockerfile中,并在结构上对此感到满意。

否则,容器之间的主要通信是通过网络I / O进行的,因此您必须将此过程包装在简单的网络协议中,在您选择的语言/框架中,这可能是最少的HTTP服务。这样做可能不值得,但是这是将二进制文件打包并打包为单独容器运行的方式。