
# 应用模板
容器应用模板用于定义用户的边缘应用，用户需要指定容器应用的容器镜像、配置信息、磁盘挂载信息以及资源占用信息。
应用需要基于镜像创建，用户首先需要先制作镜像并上传至镜像仓库。
 #### 创建应用模板
1. 登录[IEF控制台](https://console.huaweicloud.com/ief2.0/)，在"总览"页面切换实例为企业版。
2. 选择左侧导航栏"边缘应用 \> 应用模板"，单击页面右上角"创建应用模板"。
3. 填写基本信息。 
   - **名称** **（必填）**：应用模板名称。
   
   - **版本** **（必填）**：版本号。
   
   - **别名**：应用模板名称以外的一种名称。
   
   - **架构**：选择应用支持的架构。
   
   - **描述**：模板的描述信息。
   
   - **标签**：标签可用于对应用模板进行标记，方便分类管理。此处的标签只用于标识应用模板，可以在搜索时使用标签过滤应用模板。
   
   
   
   
4. 单击"下一步"，添加容器。 
   1. 选择需要部署的镜像，单击"使用镜像"。
      - 我的镜像：展示了您在容器镜像服务中创建的所有镜像。
      
      - 他人共享：展示了其他用户共享的镜像。
       
   
   2. 单击"下一步"，配置容器规格。
      图1镜像信息   
      ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001259362643.png "点击放大")
      - **镜像版本**：请选择需要部署的镜像版本。
      
      - **容器规格**：据需要选择容器CPU、内存、昇腾AI加速卡和GPU的配额。
      
      - **昇腾AI加速卡**
        容器应用选择的AI加速卡配置与实际部署的边缘节点配置的AI加速卡必须一致，否则会创建应用失败，详见[注册边缘节点](https://support.huaweicloud.com/usermanual-ief/ief_01_0084_0.html#ief_01_0084_0__li14272818297)。
        
      
      
      ![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/note_3.0-zh-cn.png)
      虚拟化切分后的NPU类型，一个容器只能挂载一个虚拟化NPU，只有当该容器退出后，该虚拟化NPU才能分配给其他容器使用。
      昇腾AI加速卡支持的NPU类型，如下表。
      表1NPU类型说明 
      | 类型     | 描述       |
      |:---|:---|
      | 昇腾310  | 昇腾310芯片  |
      | 昇腾310B | 昇腾310B芯片 |
         
      
   
   
   
   
5. 单击"下一步"，配置应用信息。 
   - **启动命令**
     容器镜像拥有存储镜像信息的相关元数据，如果不设置生命周期命令和参数，容器运行时会运行镜像制作时提供的默认命令和参数，Dockerfile中这两个字段为"Entrypoint"和"CMD"。
     如果在创建容器应用时填写了容器的运行命令和参数，将会覆盖镜像构建时的默认命令"Entrypoint"、"CMD"，规则如下：
     表2容器如何执行命令和参数 
     | 镜像Entrypoint | 镜像CMD          | 容器运行命令    | 容器运行参数        | 最终执行                 |
     |:---|:---|:---|:---|:---|
     | \[touch\]    | \[/root/test\] | 未设置       | 未设置           | \[touch /root/test\] |
     | \[touch\]    | \[/root/test\] | \[mkdir\] | 未设置           | \[mkdir\]            |
     | \[touch\]    | \[/root/test\] | 未设置       | \[/opt/test\] | \[touch /opt/test\]  |
     | \[touch\]    | \[/root/test\] | \[mkdir\] | \[/opt/test\] | \[mkdir /opt/test\]  |
        
     图2启动命令   
     ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001214722776.png "点击放大")
     - **运行命令**
       输入可执行的命令，例如/run/start。
       若可执行命令有多个，多个命令之间用空格进行分隔。若命令本身带空格，则需要加引号（""）。
       ![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/note_3.0-zh-cn.png)
       多命令时，运行命令建议用/bin/sh或其他的shell，其他全部命令作为参数来传入。
       
     
     - **运行参数**
       输入控制容器运行命令的参数，例如--port=8080。
       若参数有多个，多个参数以换行分隔。
       
      
   
   - **环境变量**
     容器运行环境中设定的变量。可以在部署应用时修改。
     单击"添加环境变量"，输入变量名称，变量值支持手动添加、密钥导入、配置项导入和变量引用方式。
     - 手动添加支持自定义变量名称和变量值。
     
     - 使用密钥导入，环境变量名称可自定义输入，环境变量值支持引用密钥的属性值，密钥创建方法请参见[密钥](https://support.huaweicloud.com/usermanual-ief/ief_01_0022_0.html)。
     
     - 使用配置项导入，环境变量名称可自定义输入，环境变量值支持引用配置项的属性值，配置项创建方法请参见[配置项](https://support.huaweicloud.com/usermanual-ief/ief_01_0010_0.html)。
     
     - 变量引用支持引用"hostIP"，即边缘节点的IP地址。
     
     
     ![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/note_3.0-zh-cn.png)
     IEF不会对用户输入的环境变量进行加密。如果用户配置的环境变量涉及敏感信息，用户需要自行加密后再填入，并在应用中自己完成解密过程。
     IEF也不提供任何加解密工具，如果您需要设置加密密文，可以使用其他平台的加解密工具。
     
   
   - **卷**
     卷是指容器运行过程中使用的存储卷，当前支持如下四种类型。
     - hostPath：将主机某个目录挂载到容器中。hostPath是一种持久化存储，应用删除后hostPath里面的内容依然存在于边缘节点本地硬盘目录中，如果后续重新创建应用，挂载后依然可以读取到之前写入的内容。 您可以将应用日志目录挂载到主机的"/var/IEF/app/log/{appName}"目录，"{appName}"是应用名，边缘节点会将"/var/IEF/app/log/{appName}"目录下后缀为log和trace的文件上传到AOM。
       
       ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001258962687.png "点击放大") 
     
     - emptyDir：一种简单的空目录，主要用于临时存储，支持在硬盘或内存中创建。emptyDir挂载后就是一个空目录，应用程序可以在里面读写文件，emptyDir的生命周期与应用相同，应用删除后emptyDir的数据也同时删除掉。
     
     - configMap：存储应用所需配置信息的资源类型，创建方法请参见[配置项](https://support.huaweicloud.com/usermanual-ief/ief_01_0010_0.html)。
     
     - secret：密钥是一种用于存储应用所需的认证信息、证书、密钥等敏感信息的资源类型，创建方法请参见[密钥](https://support.huaweicloud.com/usermanual-ief/ief_01_0022_0.html)。
       ![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/notice_3.0-zh-cn.png)
       - 请不要挂载在系统目录下，如"**/** "、"**/var/run**"等，会导致容器异常。建议挂载在空目录下，若目录不为空，请确保目录下无影响容器启动的文件，否则文件会被替换，导致容器启动异常，应用创建失败。
       
       - 挂载高危目录的情况下，建议使用低权限账号启动，否则可能会造成宿主机高危文件被破坏。
       
       - 数据存储的"类型"选择"configMap"或"secret"时，可通过设置"权限"参数，自定义挂载至容器的文件权限，输入框的填写值为文件权限的十进制表示，默认为420（rw-r--r--)。
         
      
   
   - **选项**
     - **特权选项**
       可以通过开启"特权选项"，使容器拥有root权限，可以访问主机上的设备（如GPU、FPGA）。
       
     
     - **指定运行用户**
       IEF默认不改变容器运行的用户，以构建镜像时定义的运行用户来运行。
       打开开关后，下方出现运行用户的输入框，可输入范围为0\~65534的整数。指定了运行用户后，应用将以该运行用户来运行。如果镜像的操作系统中没有该用户ID，将导致容器应用启动失败。
       
     
     - **重启策略**
       总是重启：当应用容器退出时，无论是正常退出还是异常退出，系统都会重新拉起应用容器。
       失败时重启：当应用容器异常退出时，系统会重新拉起应用容器，正常退出时，则不再拉起应用容器。
       不重启：当应用容器退出时，无论是正常退出还是异常退出，系统都不再重新拉起应用容器。
       
     
     - **容器网络**
       主机网络：使用宿主机（边缘节点）的网络，即容器与主机间不做网络隔离，使用同一个IP。
       端口映射：容器网络虚拟化隔离，容器拥有单独的虚拟网络，容器与外部通信需要与主机做端口映射。配置端口映射后，流向主机端口的流量会映射到对应的容器端口。例如容器端口80与主机端口8080映射，那主机8080端口的流量会流向容器的80端口。
       
      
   
   - **健康检查**
     - 应用存活探针：应用存活探针用于探测容器是否正常工作，不正常则重启实例。当前支持发送HTTP请求和执行命令检查，通过检测容器响应是否正常。
     
     - 应用业务探针：应用业务探针用于探测业务是否就绪，如果业务还未就绪，就不会将流量转发到当前实例。
     
     
     详细的配置说明请参见[健康检查配置说明](https://support.huaweicloud.com/usermanual-ief/ief_01_0058_0.html)。
     
   
   
   
   
6. 配置完成后，单击"创建"。
 
#### 创建新的应用模板版本
边缘应用模板支持创建多个应用版本，方便您管理边缘应用。
1. 登录[IEF控制台](https://console.huaweicloud.com/ief2.0/)，在"总览"页面切换实例为企业版。
2. 选择左侧导航栏的"边缘应用 \> 应用模板"。
3. 单击需要增加新版本的应用模板，进入"应用模板详情"页面。
4. 单击页面左下角的"创建应用版本"。 
   图3创建应用版本   
   ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001368382336.png "点击放大")
   
   
5. 填入应用版本，单击"下一步"，填写模板详细信息，具体请参照[创建应用模板]，完成新版本的应用模板创建。
 
#### 共享模板
边缘应用模板可以共享给同区域的其他服务实例使用。
![](https://support.huaweicloud.com/usermanual-ief/public_sys-resources/note_3.0-zh-cn.png)
v2 及以上企业版实例版本和旧版本之间无法共享应用模板。
1. 登录[IEF控制台](https://console.huaweicloud.com/ief2.0/)，在"总览"页面切换实例为企业版。
2. 选择左侧导航栏的"边缘应用 \> 应用模板"。
3. 单击需要共享的应用模板，进入"应用模板详情"页面。
4. 选择"共享"页签，单击"共享应用模板"，勾选服务实例。
5. 单击"确定"。 
   ![](https://support.huaweicloud.com/usermanual-ief/zh-cn_image_0000001568341130.png "点击放大")
   
   
 
