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 。
|
配置项描述 |
自定义。 |
配置映射 |
配置以下两对键值对。
|
您可以在配置项页面查看已成功创建的配置项。
步骤二:在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 为目标镜像仓库地址。
|
配置管理 |
引用创建的配置项build,并添加对应的键与挂载路径。
- dockerfile的挂载路径为/workspace/Dockerfile。
- secret的挂载路径为/kaniko/.docker/config.json。
|
- 在任务设置页签,按需配置定时规则和高级设置,并单击下一步:确认规格。
- 在确认规格页签单击确认创建。
创建完成后,您可以在任务模板列表页面查看已创建的任务信息。
步骤三:执行任务
因当前SAE任务仅支持时间触发,在成功创建任务模板后,您需要采用手动执行的方式生成任务。
- 登录SAE控制台。
- 在左侧导航栏单击任务模板列表,在顶部菜单栏选择地域,单击具体任务名称。
- 在任务模板详情页面,单击手动执行任务,跳转至任务记录页面。
新的镜像版本已成功推送至镜像仓库。
- 验证结果。
- 方式一:在任务记录页面单击目标任务id,在任务详情页面查看任务运行状态。
- 方式二:在目标任务左侧导航栏选择,在实时日志页面查看任务运行记录。
- 方式三:登录容器镜像服务控制台,在目标实例镜像仓库内查看镜像版本是否已更新。
通过S2I构建镜像
您可以使用GitLab或者GitHub仓库托管您的代码,将本地Dockerfile改为Git中的Dockerfile。本示例以阿里云Code为例进行验证。
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
- 登录阿里云Code。
- 在左侧导航栏单击设置,然后单击个人设置页面左侧导航栏的私人令牌。
- 在私人令牌页面,设置Git Token用于访问Git仓库。
步骤二:创建任务
- 登录SAE控制台。
- 在左侧导航栏单击任务模板列表,在顶部菜单栏选择地域。
- 在任务模板列表页面单击创建任务模板。
- 在任务基本信息页签,配置相关参数并单击下一步:部署配置。
- 在部署配置页签,配置相关参数并单击下一步:任务设置。
其余配置保持默认设置。
参数 |
说明 |
技术栈语言 |
选择Java。
|
任务部署方式 |
选择镜像。
|
Java环境 |
仅技术栈语言选择Java时需设置。默认选择Open JDK 8。
|
启动命令设置 |
- 启动命令:输入
/kaniko/executor 。
- 启动参数:添加以下两条参数,其中
destination 为目标镜像仓库地址。
|
环境变量设置 |
添加两条环境变量,分别标识设置的用户名和Git Token。
- 类型:选择自定义。
- 变量名称:分别输入
GIT_PASSWORD 和GIT_USERNAME 。
- 变量值/变量引用:分别输入步骤一设置的信息。
|
- 在任务设置页签,按需配置定时规则和高级设置,并单击下一步:确认规格。
- 在确认规格页签单击确认创建。
创建完成后,您可以在任务模板列表页面查看已创建的任务信息。
步骤三:执行任务
因当前SAE任务仅支持时间触发,在成功创建任务模板后,您需要采用手动执行的方式生成任务。
- 登录SAE控制台。
- 在左侧导航栏单击任务模板列表,在顶部菜单栏选择地域,单击具体任务名称。
- 在任务模板详情页面,单击手动执行任务,跳转至任务记录页面。
新的镜像版本已成功推送至镜像仓库。
- 验证结果。