Apache OpenWhisk 中 Docker 动作的创建与使用指南

Apache OpenWhisk 中 Docker 动作的创建与使用指南

openwhisk Apache OpenWhisk is an open source serverless cloud platform openwhisk 项目地址: https://gitcode.com/gh_mirrors/openw/openwhisk

概述

Apache OpenWhisk 是一个强大的无服务器计算平台,它允许开发者通过 Docker 容器来创建自定义的动作(Action)。本文将详细介绍如何在 OpenWhisk 中创建和使用 Docker 动作,包括从基础概念到实际操作的全过程。

Docker 动作的优势

使用 Docker 动作可以带来以下优势:

  1. 语言无关性:可以使用任何编程语言开发动作
  2. 依赖管理:能够包含大型或复杂的依赖库
  3. 环境定制:完全自定义运行时环境
  4. 性能优化:针对特定工作负载优化执行环境

准备工作

在开始之前,需要确保:

  1. 拥有有效的 Docker 容器仓库账户
  2. 本地已安装 Docker 和 OpenWhisk CLI 工具
  3. 了解基本的 Docker 概念和操作

使用 OpenWhisk Docker 骨架

OpenWhisk 提供了一个 Docker 骨架(Skeleton),这是一个预配置的 Docker 镜像模板,基于 Python 3.6.1 Alpine 版本,可以帮助开发者快速上手。

1. 安装 Docker 骨架

执行以下命令获取骨架文件:

wsk sdk install docker

安装完成后,当前目录下会生成 dockerSkeleton 文件夹,包含以下文件:

  • Dockerfile:Docker 镜像构建文件
  • README.md:说明文档
  • buildAndPush.sh:构建和推送镜像的脚本
  • example.c:示例 C 程序

2. 理解动作执行机制

Docker 动作的执行遵循以下约定:

  1. 可执行文件必须位于容器内的 /action/exec 路径
  2. 输入参数通过命令行参数传递,格式为 JSON 字符串
  3. 执行结果必须通过 stdout 输出,格式为单行 JSON 字符串
  4. 可以通过 stderr 输出日志信息

3. 示例程序解析

骨架中包含的 example.c 是一个简单的 C 程序示例:

#include <stdio.h>
int main(int argc, char *argv[]) {
    printf("This is an example log message from an arbitrary C program!\n");
    printf("{ \"msg\": \"Hello from arbitrary C program!\", \"args\": %s }",
           (argc == 1) ? "undefined" : argv[1]);
}

这个程序展示了如何处理输入参数和生成符合要求的输出。

构建和部署 Docker 动作

1. 构建自定义镜像

开发者可以修改 example.c 或添加其他代码文件,然后通过修改 Dockerfile 来构建自定义镜像。构建过程会自动编译 C 程序,无需本地安装编译器。

2. 推送镜像到容器仓库

首先登录容器仓库:

docker login -u <用户名> -p <密码>

然后执行构建和推送脚本:

cd dockerSkeleton
./buildAndPush.sh <用户名>/<镜像名>

3. 创建 OpenWhisk 动作

镜像推送成功后,可以创建对应的 OpenWhisk 动作:

wsk action create example --docker <用户名>/<镜像名>

调用 Docker 动作

Docker 动作的调用方式与其他 OpenWhisk 动作完全相同:

wsk action invoke --result example --param payload Rey

预期输出:

{
    "args": {
        "payload": "Rey"
    },
    "msg": "Hello from arbitrary C program!"
}

更新 Docker 动作

更新 Docker 动作需要两个步骤:

  1. 重新构建和推送镜像:
./buildAndPush.sh <用户名>/<镜像名>
  1. 更新 OpenWhisk 动作:
wsk action update example --docker <用户名>/<镜像名>

注意:如果不执行更新操作,已存在的热容器会继续使用旧版本的镜像,只有新创建的容器才会使用最新镜像。

原生动作创建

除了使用自定义镜像,还可以将可执行文件直接打包并创建原生 Docker 动作:

wsk action create example exec.zip --native

这等价于:

wsk action create example exec.zip --docker openwhisk/dockerskeleton

这种方式适用于:

  • Bash 脚本
  • 交叉编译的二进制文件
  • 其他与 openwhisk/dockerskeleton 镜像兼容的可执行文件

最佳实践

  1. 日志输出:合理使用 stdout 和 stderr 输出日志信息
  2. 错误处理:确保程序在各种情况下都能返回有效的 JSON 结果
  3. 性能优化:考虑容器预热和冷启动的影响
  4. 资源管理:根据动作需求合理配置内存和时间限制

总结

通过 OpenWhisk 的 Docker 动作功能,开发者可以突破平台内置运行时的限制,实现高度定制化的无服务器函数。无论是使用预定义的骨架还是完全自定义的镜像,都能灵活地满足各种复杂场景的需求。掌握 Docker 动作的开发流程,将大大扩展 OpenWhisk 的应用范围。

openwhisk Apache OpenWhisk is an open source serverless cloud platform openwhisk 项目地址: https://gitcode.com/gh_mirrors/openw/openwhisk

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霍薇樱Quintessa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值