使两个Docker容器协同工作

时间:2017-06-01 12:10:41

标签: docker

我正在寻求有关如何将我的应用程序停靠的建议。这是应用程序的工作方式: 有一个网站负责帮助用户创建可执行文件的输入。输入是两个图像,一个由用户上传,另一个是用户在他上传的图像上绘制内容。该网站使用Python / Django和Apache2。完成后,网站将两个图像写在服务器上,将它们存储在mysql数据库中,并调用使用这两个图像作为输入的可执行文件。可执行文件使用OpenCV 3.1,可以这样调用:

./my_executable.sh ./path_to_image1.jpg ./path_to_image2.jpg ./path_where_to_save_output.jpg

然后,可执行文件将服务器上的输出图像写入与其他两个输入图像相同的位置,并且网站显示结果。

现在,Docker-Compose编排了两个容器,一个带有官方的mysql图像(我实际上没有这个容器的问题,它工作正常,因为我只需要告诉Django在哪里使用服务名找到数据库) ,我用所有Python / Django / Apache2 / OpenCV3.1依赖项创建的。意味着网站和可执行文件在同一容器中运行。根据我对Docker的理解,网站和可执行文件应该在不同的容器中运行。但我无法弄清楚容器如何告诉另一个容器执行某些东西。

我可以创建一个只安装OpenCV 3.1并在可执行文件中复制的图像i_cv31:

FROM debian:jessie
#OpenCV31
RUN apt-get update && apt-get install -y ALL_OPENCV_DEPENDENCIES
RUN CLONE_AND_INSTALL_OPENCV_31
#Executable
COPY my_executable.sh/
ENTRYPOINT ["/my_executable.sh"]

将图像放在主机文件夹中,我可以将此文件夹映射到容器内,并在主机上调用可执行文件:

docker run -v /host/images:/images i_cv31 /images/image1.jpg /images/image2.jpg /images/result.png

可执行文件在卷上写入result.png,容器结束其任务并停止。

网站容器是否有办法向主机发送信号以便创建可执行容器?我知道我们可以将docker.sock从主机映射到带有卷的容器,但不知怎的,我无法使它工作,看起来这不是很安全。同样,出于安全原因,似乎不推荐使用docker run选项的--link,而且我不知道如何使用此选项从另一个容器访问文件。似乎有docker网络选项,如果我理解正确的是Docker-Compose的功能。

总结一下:我的网络容器会在卷中写入两张图片。这个容器需要Apache2 / Python / Django。如果我们提供两个图像,则可以从另一个启动可执行文件的容器访问相同的卷。这个容器需要OpenCV。我缺少的是这个信号:图像准备就绪,启动可执行文件并返回结果,以便网站可以显示它。 到目前为止,这个信号是Javascript文件中的Ajax调用。它将两个图像发送到Django,后者调用可执行文件并知道结果图像何时准备就绪,以便显示。

我真的很失落所以非常感谢你能给我的任何帮助。

0 个答案:

没有答案
相关问题