背景
当下的云原生时代,容器逐渐成为软件部署的标准。为了提升开发效率,函数计算提供容器镜像函数,开发者可以把自己的容器镜像作为函数的运行内容。容器镜像函数具备以下优点:
- 低成本迁移,保持环境一致。简化分发和部署的步骤。
- 容器镜像具备分层缓存能力,提高镜像上传拉取效率。
基本原理
函数计算平台在创建容器镜像函数时,选择自己的CRS仓库镜像,并需要输入用户名和密码,启动实例会拉取您选择的镜像,拉取成功后,根据指定的启动命令启动您的镜像。
容器镜像需要有HTTP Server。函数计算通过配置的端口监听容器内的HTTP Server,此HTTP Server将接管函数计算的所有请求,包括通过API调用和通过HTTP调用的请求。您在开发函数具体的交互逻辑之前,一般需要确认开发的是通过API调用函数还是通过HTTP请求调用函数,原理如下所示:
使用限制
镜像大小限制
最大支持10 GB(普通实例)的未解压镜像。
镜像仓库
支持拉取天翼云容器镜像服务的镜像。
镜像访问
仅支持同账号同地域下私有镜像仓库读取。
容器内文件读写权限
容器UID默认是Root用户ID,即 UID=0
。如果您在Dockerfile中指定了具体的使用者,则会以指定的使用者运行该容器镜像。
容器可写层存储空间限制
容器产生的数据大小限制为512 MB或10 GB(同函数高级配置项中的磁盘大小一致)
解释
容器可写层数据会随着容器被销毁而删除。如果需要持久化存储,可以考虑使用函数计算挂载NAS或者ZOS。可以在函数配置->存储中配置。
镜像架构限制
目前函数计算仅支持AMD64镜像架构,因此,针对ARM架构的机器(比如搭载M系列芯片的Mac电脑),构建镜像时需要指定镜像的编译平台为Linux/Amd64。参考命令如 docker build --platform linux/amd64 -t $IMAGE_NAME .
。
解释
构建完成后,可执行 docker inspect
进行检查。如果返回内容包含 "Architecture" : "amd64"
,则表示构建的镜像正确。
HTTP Server配置要求
容器镜像启动的服务必须要监听函数配置的监听端口。
函数配置的监听端口默认是9000。如果容器镜像使用默认的监听端口,那么实现的 HTTP Server监听的端口也必须是9000。 同理,如果监听端口是8080,那么实现的HTTP Server监听的端口也必须是8080。
公共请求头
容器镜像函数的公共请求头和自定义运行时函数的公共请求头一致。更多信息,请参见自定义运行时上下文。
日志格式
容器镜像函数中所有打印到标准输出(Stdout)的日志会自动收集到您指定的日志服务中。关于配置日志功能的具体操作,请参见配置日志。
容器镜像函数的日志格式与自定义运行时函数的日志格式一致。更多信息,请参见函数日志格式。
冷启动优化最佳实践
相比于其他函数上传代码方式部署,容器镜像会带来额外的数据下载和解压的时间。为了更好的冷启动体验,推荐以下最佳实践:
- 容器镜像地址推荐使用与函数计算同地域的VPC镜像地址,减少镜像拉取延时。
- 镜像进来裁剪体积,基于类似Alpine或Ubuntu这样的最小镜像或者是其他镜像中精简版本构建自定义镜像。仅保留必要的依赖。
- 容器镜像配合预留实例一起使用。
- 在资源允许和线程安全的情况下,搭配使用单实例多并发功能,可避免不必要的冷启动,同时降低成本。更多信息,请参见设置实例并发度。
计费说明
容器镜像函数的计费项与其他类型函数的计费项一致。