Custom Container 部署
刚刚我们已经通过 Custom Runtime 部署 来自定义代码的运行时了 , 但是即使通过那种方式 , 我们也无法改变代码运行的容器环境 。 比如我有一段代码 , 只有在 Windows 的 IIS 上才能运行 , 怎么办? 显然 Custom Runtime 部署 固定的容器环境 , 是不满足我们的需求的 。
这时候我们就需要在本地 , 构建我们自己的容器镜像 , 并把它推送到 阿里云的镜像仓库 里去 。 所以启用 Custom Container 部署 , 最重要的先决条件是什么?
安装 docker 并 开通阿里云容器镜像服务
它对应的 serverless-devs 也非常简单:
function: caPort: 9000 runtime: custom-container customContainerConfig: image: registry.cn-hangzhou.aliyuncs.com/som-custom-container/nest-appactions: pre-deploy: # 在部署前执行 , 在你的本地构建镜像 , 所以需要你已经安装好了 docker - component: fc build --use-docker --dockerfile ./code/Dockerfile
customContainerConfig#image 就是你的镜像仓库的地址(我示例中用的公网地址 , 最佳实践为函数计算同地域的VPC镜像地址) , 复制粘贴即可 。
fc build --use-docker --dockerfile ./code/Dockerfile 这个命令 , 你可以理解成一堆 docker 构建发布的命令脚本 。
而 Dockerfile 就是构建镜像的核心了 , 在这里我们可以任意的配置我们的系统环境 。 比如我们要转化操作图集变成pdf文件 , 则预先安装好 ghostscript 。
我们要在 nodejs runtime 中构建类似 Canvas 实现 , 额外安装 build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev.....
这里给出一个 Dockerfile 示例参考:
FROM node:18-alpineRUN mkdir -p /usr/src/botWORKDIR /usr/src/botCOPY package.json yarn.lock /usr/src/bot/# 注册 alpinelinux 镜像地址防止下载过慢RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \\ && apk add --no-cache \\ build-base \\ g++ \\ cairo-dev \\ jpeg-dev \\ pango-dev \\ giflib-dev \\ && apk add --update --repository http://dl-3.alpinelinux.org/alpine/edge/testing \\ libmount \\ ttf-dejavu \\ ttf-droid \\ ttf-freefont \\ ttf-liberation \\ fontconfig \\ && yarn --prodCOPY ./src /usr/src/bot/srcEXPOSE 9000ENTRYPOINT [\"yarn\" \"start\"
这种部署方式最灵活 , 能做到很多上述2个部署方式做不到的事情 , 但是它的冷启动速度也是最慢的 。 原因在于 , 容器镜像依赖的基础环境和应用很容易臃肿 , 这带来了额外的数据下载和解压的时间 。 所以这种部署方式上生产环境 , 往往很多措施来辅助 , 比如 镜像启动加速 , 预留实例 和 单实例多并发 等等功能 , 同时自己在构建时也要做一定的优化 , 详见
结论
- 灵活性(从低到高)
- 单语言&普通的 CRUD -> 预置 Runtime 部署
- 自定义语言or运行版本 -> Custom Runtime 部署
- 自定义容器环境 -> Custom Container 部署
- 冷启动速度(从慢到快)/优化成本(从高到低)
- 减持1.1亿股,成交30亿元,“伤害”董明珠最深的竟是经销商?
- 软件|新电脑需装的6款黑科技软件,轻松玩转新机,建议提前摸透
- 股价|高点回调36% 新东方股价继续暴跌:投资者清仓式减持
- AMD|游戏学习轻松玩转,暑期AMD极致性价比装机推荐
- 映客能玩转元宇宙吗?
- 快手视频|商家要如何玩转小红书平台的获客和推广,这里分享三条小技巧
- 索尼|Python学习利器!完全背记手册,一本玩转
- Hi-Fi|打造轻奢HiFi系统,不同价位玩转天籁好声音,618史低推荐!
- 物理研究所|来!这个儿童节一起玩转科学
- 抖音|这些干货告诉你新手如何玩转自媒体,我一个月赚了7158
