如何在远程Docker容器中运行Python脚本?

时间:2016-05-19 01:00:40

标签: docker kubernetes rundeck

我是Docker的新手,所以我为任何无知而道歉。

我有一个需要触发Python脚本才能运行的Web API。该脚本是非常耗费资源的(CPU和RAM),因此它需要在与API服务器不同的服务器上运行。我打算在Docker容器中运行这个脚本。我也计划使用Kubernates。

我的API将从图像构建一个容器,然后在图像启动并运行后需要运行Python脚本。

如何触发脚本运行?使用Rundeck是否有意义?或者简单地使用SSH会更有意义吗?或其他什么?

1 个答案:

答案 0 :(得分:2)

在我的脑海中,我可以想到两种方法,我用过这两种方法:

  • 如果您希望脚本立即启动,请在Dockerfile中使用CMDENTRYPOINT在容器启动时启动脚本

所以,抽象,像这样

FROM python

COPY myscript.py /tmp

CMD ["python", "/tmp/myscript.py"]
  • 如果您希望脚本仅在触发时运行(例如,通过Web请求事件),则将Python代码“包装”在诸如flask,bottle或uwsgi之类的内容中。

这可能是这样的:

您的包装器脚本为mywrapper.py,其中包含:

#!usr/bin/env python
import bottle
app = bottle.Bottle()
@app.route('/')
def main():
   call_my_python_code()

在这种情况下,您的Dockerfile可以通过公开端口然后启动Web服务器来设置它:

FROM python
COPY wrapper.py runserver.sh myscript.py /tmp

EXPOSE 80
CMD ["/bin/bash", "-x", "/tmp/runserver.sh" ]

使用runserver.sh设置服务器位:

#!/bin/bash
set -e
exec uwsgi --http 0.0.0.0:80 --wsgi-file wrapper.py --callable app