Serverless 应用引擎 SAE(Serverless App Engine)支持短时任务,能够在短时间内快速创建大量计算任务,并且在任务完成后快速释放计算资源。基于SAE短时任务实现镜像构建的实践,开发者无需构建常驻资源,支持按量付费。本文介绍如何使用SAE任务,完成从任意Dockerfile到任意镜像仓库的CI流程,实现S2I能力。
前提条件
构建镜像并上传至镜像仓库。您可以按需参考以下语言:
背景信息
kaniko是一款用于构建容器镜像的谷歌开源工具,其工作原理是根据Dockerfile逐行执行命令,执行完毕后为文件系统创建快照(Snapshot),并与上一个快照进行对比。如果内容不一致,便会创建一个新的层级,并将所有修改都写入镜像的元数据中。当Dockerfile中每条命令执行完毕后,kaniko会将新生成的镜像推送到指定的镜像仓库。更多信息,请参见kaniko。
除通过编写Dockerfile的方式之外,您还可以通过Source-To-Image(S2I)的方式构建Docker镜像。因此,通过SAE和kaniko,您可以借助Dockerfile构建镜像,实现S2I能力。
本文介绍的镜像构建实践支持按量付费。若镜像构建需要依赖公网拉取,则需VPC开放公网访问能力。更多信息,请参见连接公网概述。
通过Dockerfile构建镜像
步骤一:在SAE控制台创建配置项
您需要创建配置项,分别对应需要构建的Dockerfile和镜像仓库的配置信息。本示例以华北2(北京)地域为例。
登录SAE控制台。
在左侧导航栏,单击命名空间(环境),在顶部菜单栏选择地域,然后单击具体命名空间名称。
在左侧导航栏单击配置项,在配置项页面单击创建。
在创建配置项面板,选择手动创建,配置相关参数并单击确定。
参数说明如下:
参数
示例值
配置项名称
输入
build
。配置项描述
自定义。
配置映射
配置以下两对键值对。
键:输入
dockerfile
,Dockerfile为示例Dockerfile。值:
FROM registry-vpc.cn-beijing.aliyuncs.com/****/nginx:stable CMD ["echo","Hello DevOps"]
键:输入
secret
,为镜像仓库配置。值:格式如下。
{"auths":{"https://registry-vpc.cn-beijing.aliyuncs.com":{"username":"****@test.aliyunid.com","password":"****}}}
您可以在配置项页面查看已成功创建的配置项。
步骤二:在SAE控制台创建任务
本示例以Java语言为例,仅介绍创建任务模板的关键参数,您可以按需选择语言。参数的更多信息,请参见任务模板管理。
登录SAE控制台。
- 在左侧导航栏,单击任务模板列表,在顶部菜单栏选择地域。
- 在任务模板列表页面,单击创建任务模板。
在任务基本信息页签,配置相关参数并单击下一步:部署配置。
在部署配置页签,配置相关参数并单击下一步:任务设置。
其余配置保持默认设置。
参数
说明
技术栈语言
选择Java。
任务部署方式
选择镜像。
Java环境
仅技术栈语言选择Java时需设置。默认选择Open JDK 8。
配置镜像
在公有镜像页签输入镜像地址。格式如下:
registry-vpc.<reigonId>.aliyuncs.com/<命名空间的名称>/<镜像仓库的名称>:<镜像版本号>
示例如下:
registry-vpc.cn-beijing.aliyuncs.com/sae-test/kaniko-executor:1.0
说明该镜像同
gcr.io/kaniko-project/executor:v1.8.0
。启动命令设置
启动命令:输入
/kaniko/executor
。启动参数:添加以下两条参数,其中
destination
为目标镜像仓库地址。--dockerfile=/workspace/Dockerfile
--destination=registry-vpc.cn-beijing.aliyuncs.com/****/jar-test:job
配置管理
引用创建的配置项build,并添加对应的键与挂载路径。
dockerfile的挂载路径为/workspace/Dockerfile。
secret的挂载路径为/kaniko/.docker/config.json。
在任务设置页签,按需配置定时规则和高级设置,并单击下一步:确认规格。
在确认规格页签单击确认创建。
创建完成后,您可以在任务模板列表页面查看已创建的任务信息。
步骤三:执行任务
因当前SAE任务仅支持时间触发,在成功创建任务模板后,您需要采用手动执行的方式生成任务。
通过S2I构建镜像
您可以使用GitLab或者GitHub仓库托管您的代码,将本地Dockerfile改为Git中的Dockerfile。本示例以Codeup为例进行验证。
Dockerfile示例如下:
FROM registry.cn-beijing.aliyuncs.com/hub-mirrors/maven:3-jdk-8 AS build
COPY src /usr/src/app/src
COPY pom.xml /usr/src/app
COPY settings.xml /user/src/app/settings.xml
RUN mvn -f /usr/src/app/pom.xml -s /user/src/app/settings.xml clean package -DskipTests
from registry.cn-beijing.aliyuncs.com/hub-mirrors/openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/application.jar
COPY --from=build /usr/src/app/${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
步骤一:设置Git Token
登录Codeup。
在顶部菜单栏,单击个人账号,然后单击个人设置。
在个人设置页面左侧导航栏,单击个人访问令牌,然后在私人令牌页面,单击创建访问令牌,设置Token用于访问Git仓库。
步骤二:创建任务
登录SAE控制台。
- 在左侧导航栏,单击任务模板列表,在顶部菜单栏选择地域。
- 在任务模板列表页面,单击创建任务模板。
在任务基本信息页签,配置相关参数并单击下一步:部署配置。
在部署配置页签,配置相关参数并单击下一步:任务设置。
其余配置保持默认设置。
参数
说明
技术栈语言
选择Java。
任务部署方式
选择镜像。
Java环境
仅技术栈语言选择Java时需设置。默认选择Open JDK 8。
启动命令设置
启动命令:输入
/kaniko/executor
。启动参数:添加以下两条参数,其中
destination
为目标镜像仓库地址。--context=git://code.aliyun.com/****/spring-boot.git
说明上下文格式为
git://TOKEN@github.com/acme/myproject.git#refs/heads/mybranch
。--destination=registry-vpc.cn-beijing.aliyuncs.com/****/jar-test:job
环境变量设置
添加两条环境变量,分别标识设置的用户名和Git Token。
类型:选择自定义。
变量名称:分别输入
GIT_PASSWORD
和GIT_USERNAME
。变量值/变量引用:分别输入步骤一设置的信息。
在任务设置页签,按需配置定时规则和高级设置,并单击下一步:确认规格。
在确认规格页签单击确认创建。
创建完成后,您可以在任务模板列表页面查看已创建的任务信息。
步骤三:执行任务
因当前SAE任务仅支持时间触发,在成功创建任务模板后,您需要采用手动执行的方式生成任务。