在docker容器中运行快速程序

时间:2015-06-09 17:18:30

标签: docker

我的网络应用程序使用graphicsmagick来调整图像大小。调整图像大小通常需要大约500毫秒。为了简化设置并将其关闭,我想将graphicsmagick调用移动到docker容器中并使用docker run来执行它。但是,在容器内运行会增加大约300毫秒,这对我的用例来说是不可接受的。

为了减少启动容器的开销,可以运行无休止的程序(如docker run tail -f /dev/null),然后使用docker exec执行对正在运行的容器内的graphicsmagick的实际调用。然而,这似乎是一个大黑客。

如何用docker“正确”解决这个问题,或者它在这里不合适?

2 个答案:

答案 0 :(得分:0)

最好的方法是:

  • 创建自定义deb / rpm包
  • 使用系统回购中的一个

但是如果你喜欢更多的码头工作方式,那么最好的可见方法是(例如下面):

启动“守护程序”:

docker run --name ubuntu -d -v /path/to/host/folder:/path/to/guest/folder ubuntu:14.04 sleep infinity

执行命令:

docker exec ubuntu <any needed command>

其中:

“ubuntu” - 容器名称

-d - 取消附加容器

-v - mount volume host - &gt;容器

睡眠无穷大 - 什么都不做,用作入口点,并且比读取操作更好。

如果使用文件,请使用已安装的卷,如果不使用 - 请不要安装卷,只使用管道。

答案 1 :(得分:0)

这听起来像是微服务的一个很好的候选者,一个长期存在的服务器(用您选择的语言实现)在端口上监听,以调整使用graphicsmagick的请求。

优点:

  • 大小调整器的实现细节保存在容器内。
  • 可伸缩性 - 您可以启动更多容器并将它们放在负载均衡器后面。

缺点:

  • 您必须实施服务器

Pro或Con:

  • 您已经开始迈向微服务架构。

使用docker exec可能是可能的,但实际上并不打算以这种方式使用。切断中间人并直接与你的容器交谈。