OpenWhisk支持自定义注册表

时间:2018-07-10 16:00:04

标签: docker openwhisk

我需要在OpenWhisk中运行Docker操作。在Docker容器内部,我执行一个Java程序。

现在,我从Openwhisk上拉下Docker骨架并在其上安装了Java。 我还将Java程序放入容器中,并替换了exec。

我可以使用以下方法创建动作:

wsk create action NAME --docker myDockerHub/repo:1 -i

这不是最佳选择,因为我的代码不应放在DockerHub上。 OpenWhisk是否为我的本地注册表提供用法?

wsk action create ImportRegionJob --docker server.domain.domain:5443/import-region-job:v0.0.2 -i
error: Unable to create action 'ImportRegionJob': The request content was malformed:
image prefix not is not valid (code qXB0Tu65zOfayHCqVgrYJ33RMewTtph9)
Run 'wsk --help' for usage.

我知道您可以在创建docker操作时将.zip文件提供给docker操作,但这不起作用,因为使用的默认映像未安装Java。

非常感谢!

2 个答案:

答案 0 :(得分:0)

从zip文件部署应用程序时可以指定Docker映像。这使您可以将现有的Java运行时与zip文件一起使用,该zip文件已安装了Java,从而无需自定义映像。

wsk action update --docker openwhisk/java8action action_name action_files.zip

答案 1 :(得分:0)

我在分布式OpenWhisk环境中实现了这一目标。 docker操作托管在由GitLab CI构建的GitLab中,并部署到其各自GitLab存储库中的自定义容器注册表中。从本地注册表中提取数据比从Docker集线器中提取数据要快得多。

在OpenWhisk中,使用包含注册表URL的完整路径创建操作。

wsk create action NAME --docker YourRegistry:port/namespace/image[:tag]

在调用时,将在计算节点上的调用者容器内部执行该操作的pull命令。下表在第一列中显示了调用程序主机的示例设置(在openwhisk/ansible/environments/distributed/hosts的{​​{1}}节中进行了配置),在第二列中,显示了在该主机上运行的各个调用程序容器名称。在第一列中的主机名上执行docker ps时,第二列中的调用者容器应显示:

[invokers]
invoker-host-0 invoker0
invoker-host-1 invoker1
...
invoker-host-2 invokerN

现在,您可以在一个命令中为所有调用者执行for $I in $(seq 0 N); do ssh invoker-host-$I docker ps | grep invoker$I; done

docker login

作为先决条件,我必须在所有调用程序容器中添加注册表的根证书,update-ca-certificates并重新启动docker deamon。

一个改进可能是已经在调用方容器映像中做到了这一点,该映像是在部署openwhisk(运行前)for $I in $(seq 0 N); do ssh invoker-host-$I docker exec invoker$I docker login YourRegistry:port -u username -p TokenOrPassword; done 时构建的,该映像导入到invoker.yml中。