Apache OpenWhisk是一个强大的开源云函数平台,它允许开发者使用多种编程语言编写函数并将其作为云服务进行调用。其中,Docker容器运行时配置是OpenWhisk最灵活的功能之一,让您能够完全自定义函数的执行环境。🎯
Apache OpenWhisk支持使用自定义Docker镜像作为函数运行时环境。这种自定义运行时镜像可以在容器初始化期间内置函数源文件,或者由平台动态注入。构建自定义运行时镜像是解决外部应用依赖项过大而无法部署的常见解决方案,特别是对于机器学习库等大型依赖项。
为什么需要自定义Docker运行时?
在Apache OpenWhisk中,每个函数都有48MB的大小限制。当您的函数需要大型依赖库时,比如TensorFlow.js(超过170MB)或NumPy等机器学习库,自定义Docker运行时就成为理想的选择。通过这种方式,您可以在容器构建过程中预安装这些依赖库,从而将它们从部署归档中排除。
如何使用自定义Docker运行时
基本用法
使用Apache OpenWhisk CLI的--docker配置参数为函数设置自定义运行时:
wsk action create <ACTION_NAME> --docker <IMAGE> source.js
或者,如果您不需要额外的源文件或归档文件:
wsk action create <ACTION_NAME> --docker <IMAGE>
扩展现有运行时
Apache OpenWhisk在Docker镜像仓库上发布了所有现有的运行时镜像,这使得使用现有语言运行时镜像作为基础镜像变得非常简单。容器已经设置好处理该语言的平台调用请求,这意味着镜像构建文件只需要包含安装那些额外库或依赖项的命令。
Node.js示例
FROM openwhisk/action-nodejs-v10:latest
RUN npm install @tensorflow/tfjs-node
Python示例
FROM openwhisk/python3action:latest
RUN apk add --update py-pip
RUN pip install numpy
创建原生动作
Docker支持也可用于在平台上运行任何可执行文件(从静态二进制文件到shell脚本)。原生动作可以使用--nativeCLI标志创建,而不是显式指定dockerskeleton作为运行时镜像名称。
Shell脚本示例
#!/bin/bash
ARGS=$@
NAME=`echo "$ARGS" | jq -r '."name"'`
DATE=`date`
echo "{ \"message\": \"Hello $NAME! It is $DATE.\" }"
运行时配置最佳实践
镜像版本管理
自定义运行时镜像应尽可能使用显式镜像标签进行版本控制。当镜像标识符具有latest标签(或没有显式标签)时,从自定义镜像创建新的运行时容器将始终导致对注册表的镜像刷新检查。
现有运行时镜像
Apache OpenWhisk提供了一系列官方运行时镜像:
openwhisk/action-nodejs-v10- Node.js 10运行时openwhisk/python3action- Python 3运行时openwhisk/java8action- Java 8运行时openwhisk/action-swift-v4.2- Swift 4.2运行时openwhisk/action-php-v7.4- PHP 7.4运行时
高级配置选项
自定义运行时清单
您可以通过-m选项传递运行时清单来使用自定义运行时:
{
"runtimes": {
"ruby": [
{
"kind": "ruby:2.5",
"default": true,
"deprecated": false,
"image": {
"prefix": "openwhisk",
"name": "action-ruby-v2.5",
"tag": "latest"
}
}
]
}
}
实用技巧和建议
-
使用明确的镜像标签:避免使用
latest标签,除非在快速原型开发阶段。 -
利用本地缓存:明确标记的镜像允许系统优雅地恢复,使用本地缓存的镜像,使其对外部问题更具弹性。
-
监控冷启动时间:首次使用新的或更新的镜像调用时,从Docker镜像仓库拉取镜像到本地平台注册表可能会导致更长的冷启动时间。
-
遵循安全最佳实践:确保您的自定义镜像来自可信源,并定期更新以包含安全补丁。
通过Apache OpenWhisk的Docker容器运行时配置,您可以创建高度定制化的函数执行环境,满足特定的业务需求和技术要求。这种灵活性使得OpenWhisk成为构建复杂无服务器应用程序的理想选择。🚀
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





