镜像构建服务通过镜像模板实现对镜像内容的定制,镜像模板可以通过指定镜像组件或直接指定命令来创建,镜像组件本质是由一条或多条命令构成,因此最小单元是命令。本文提供了镜像构建服务的常用命令格式和示例供您参考。
命令语法说明
镜像构建服务支持YAML(适用于Linux和Windows)和Dockerfile(仅适用于Linux)两种格式的命令。
使用Dockerfile格式的命令不够灵活且有操作系统限制,推荐您使用YAML格式。
YAML和Dockerfile两种格式的语法要求如下:
YAML:需要定义
Parameters
和Tasks
,语法如下。Parameters: # 用于定义自定义参数,可选 param1: # 参数名,必填 Type: String # 参数类型,必填,String/Number/Boolean之一 DefaultValue: defaultValue #参数默认值,选填,当参数没有默认值时,使用的组件的模板需要显式传入 Tasks: # 用于定义组件的任务列表,依次执行, 至少包含一个task - Name: taskName1 # 任务名称,必填 Action: RunShellCommand # 任务的动作,必填,可以参考YAML格式组件命令集 Properties: # 动作参数,取决于具体选用的action commandContent: echo {{ param1 }} # 引用自定义参数 - Name: taskName2 Action: action2 Properties: action2Property1: {{ taskName1.stdout }} # 引用taskName1的输出
说明您可以在Tasks字段的属性内引用上述定义的参数。引用的语法如下:
{{taskName1.stdout}}
Dockerfile
每行一条命令。
同一个命令允许设置多行,换行需要在前一行的末尾添加换行符(\)。
镜像构建服务支持的命令
镜像构建服务在控制台和API分别创建组件时,组件支持的命令格式说明如下。
组件命令(控制台和API均支持)
(推荐)YAML格式
命令 | 命令格式或示例 | 说明 | 输出 |
RunShellCommand |
|
|
|
RunPowerShellCommand |
|
| |
InvokeCommand |
| 执行一条公共命令。 | |
OSSDownload |
|
| 无 |
OSSUpload |
|
| |
WebDownload |
| 从网络上下载文件。 | |
Reboot |
| 重启服务器。 |
Dockerfile格式
命令 | 命令格式或示例 | 说明 |
RESTART |
|
|
RUN |
|
|
ENV |
|
说明 使用 |
WORKDIR |
| 设置工作目录。 |
COPY |
| 复制文件。 说明 网络文件统一使用 |
USER |
| 设置执行命令的用户。 说明 变量 |
LABEL |
|
|
CMD |
| 开机自启动。 |
ENTRYPOINT |
| 开机自启动。 说明
|
模板命令(Dockerfile格式,仅API支持)
命令 | 命令格式或示例 | 说明 |
COMPONENT |
| 指定镜像组件,支持指定系统组件或您创建的自定义组件。
|
RESTART |
|
|
RUN |
|
|
ENV |
|
说明 使用 |
WORKDIR |
|
|
COPY |
|
说明 网络文件统一使用 |
USER |
|
说明 变量 |
LABEL |
|
|
CMD |
|
|
ENTRYPOINT |
|
说明
|
命令示例
通过具体场景为您展示组件命令和模板命令的示例。
组件命令
示例一:在组件中使用自定义入参
例如将函数 (3x+2y+z)+(3x+2y+z)配置到镜像组件中,实现在每次创建镜像模板时给x,y,z赋不同的值。如下为组件命令示例,模板示例可参见示例一:在构建模板中关联自定义入参组件并为入参赋值。
Parameters:
x:
Type: String
y:
Type: String
z:
Type: String
Tasks:
- Name: count
Action: RunShellCommand
Properties:
commandContent: echo $((3 * {{x}} + 2 * {{y}} + {{z}}))
- Name: result
Action: RunShellCommand
Properties:
commandContent: echo $(({{count.stdout}}+{{count.stdout}}))
示例二:将存储在OSS的脚本文件配置到镜像组件
将存放在OSS Bucket上Linux脚本通过镜像组件构建到镜像中,以便企业内部可以使用同一个镜像创建相同配置的ECS实例。由于镜像组件OSSDownload、OSSUpload命令,所以不需要您在组件代码中明文硬编码AK。
Tasks:
- Name: ossdownload
Action: OSSDownload
Properties:
bucketName: <替换为您的OSS Bucket名称>
destinationDir: /home
objectName: <您OSS Bucket上的脚本文件>
- Name: setpermissions
Action: RunShellCommand
Properties:
commandContent: sudo chmod +x /home/<您OSS Bucket上的脚本文件>
- Name: createfile
Action: RunShellCommand
Properties:
commandContent: sudo touch /home/output.txt
- Name: setfilepermissions
Action: RunShellCommand
Properties:
commandContent: sudo chmod 666 /home/output.txt
- Name: result
Action: RunShellCommand
Properties:
commandContent: sudo bash /home/<您OSS Bucket上的脚本文件> &> /home/output.txt
- Name: ossupload
Action: OSSUpload
Properties:
bucketName: <替换为您的OSS Bucket名称>
fileToUpload: /home/output.txt
objectName: output.txt
模板命令
示例一:在构建模板中关联自定义入参组件并为入参赋值
为示例一:在组件中使用自定义入参中的x,y,z赋值,您可以在每次设置模板命令时给x,y,z赋不同的值。
COMPONENT i-xxxxxxxxx --x 1 --y 2 --z 3
示例二:在构建模板中通过组件版本自动关联最新组件
当存在多个组件版本时,例如组件1.0.1、组件1.0.2、组件1.0.3,通过在模板命令中指定模糊版本1.0.*,可以自动关联最新的组件版本1.0.3。
COMPONENT acs:ecs:cn-hangzhou:<替换为阿里云账号ID>:imagecomponent/<替换为自定义入参的组件名称>/1.0.*