运行命令并在成功时杀死

时间:2018-05-14 08:23:57

标签: shell docker

我在Kubernetes上部署了一个Rails。目前,应用程序预加载时间很长(大约一分钟),我正在寻找减少这段时间的方法。

我发现的一个解决方案是一个名为bootsnap的gem来缓存一些重要文件,因此每次启动时这些文件都已加载,预加载的增益大约为50%

只有当我们重新启动服务器并且使用Kubernetes我们总是创建一个新的Pod时,它才会起作用,因此没有缓存,并且使用bootsnap没有任何好处。

要创建此缓存,我只需要运行rails server所以我认为我可以做的就是在我的Dockerfile中添加一个命令来启动Rails,然后,如果成功,则杀死它,因为在那时,文件已缓存,我的图像将包含这些文件

我有什么方法可以做像

这样的事情
RUN rails server --daemon
RUN until port 3000 is not up wait
RUN kill server

2 个答案:

答案 0 :(得分:1)

我认为它适用于

#!/bin/sh

bundle exec rails server --daemon

while ! nc -z localhost 3000; do
  echo "Checking for Rails"
  sleep 0.5
done

kill $(cat tmp/pids/server.pid)

答案 1 :(得分:0)

你应该能够做到这一点。将这3行(已开发)添加到Dockerfile并进行测试。