如何将Python Docker镜像变成OpenWhisk操作?

5
我有一个运行Python程序的Docker镜像。现在我想将此容器作为OpenWhisk操作运行。我该如何做?
我已经看到了其他编程语言的几个示例,以及C和Node.js中出色的黑盒black box骨架方法。但我想更了解OpenWhisk如何与容器交互,并尽可能地仅使用Python。
1个回答

6
现在比我之前的回答简单多了(2016年9月)。使用命令$ wsk sdk install docker创建dockerSkeleton目录后,您只需编辑Dockerfile,确保您的Python(现在是2.7)接受参数并以适当的格式提供输出。以下是概要。我在GitHub上写得更详细。 程序
文件test.py(或下面在编辑的Dockerfile中将使用的whatever_name.py
- 确保它是可执行的(chmod a+x test.py)。 - 确保它有第一行的shebang。 - 确保在本地运行。
Dockerfile 将以下内容与提供的Dockerfile进行比较,以获取Python脚本test.py并准备构建docker映像。希望注释可以解释差异。任何在当前目录中的资产(数据文件或模块)以及在requirements.txt中列出的任何Python依赖项都将成为映像的一部分。
# Dockerfile for Python whisk docker action
FROM openwhisk/dockerskeleton

ENV FLASK_PROXY_PORT 8080

# Install our action's Python dependencies
ADD requirements.txt /action/requirements.txt
RUN cd /action; pip install -r requirements.txt

# Ensure source assets are not drawn from the cache 
# after this date
ENV REFRESHED_AT 2016-09-05T13:59:39Z
# Add all source assets
ADD . /action
# Rename our executable Python action
ADD test.py /action/exec

# Leave CMD as is for Openwhisk
CMD ["/bin/bash", "-c", "cd actionProxy && python -u actionproxy.py"]

请注意 ENV REFRESHED_AT ... 部分,我使用它来确保当构建镜像时,更新的 test.py 层被全新地获取,而不是从缓存中读取。

归根结底,容器需要在8080端口提供REST API,并具有两个端点“/init”和“/run”。init将运行一次,这是设置函数所需的任何下载或设置全局状态的机会,然后/run将在不运行“/init”的情况下多次运行。这就是我们所说的温暖种子容器。以下是另一个示例https://github.com/openwhisk/openwhisk/tree/master/core/pythonAction。 - csantanapr
@csantanapr,根据您的意见,我更新了关于/init的部分。非常感谢。 - iainH
我们上面的评论与原来的答案有关,但简化的2016年9月Openwhisk已经使其无效。 - iainH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接