
# 制作镜像包或插件包
将jar包转换为镜像包或插件包。
![](https://support.huaweicloud.com/devg-iotedge/public_sys-resources/caution_3.0-zh-cn.png)
若制作镜像包以容器化方式部署应用，不支持在一个容器内运行多个集成ModuleSDK的软件进程或者重启集成ModuleSDK的软件进程，会导致鉴权失败等问题。
 #### 镜像包打包
1. 上传打包的项目。 
   将jar文件上传到联网的linux机器上，如目录（/home/monitor）中
   
   
2. 安装docker。 
   请确认使用的系统已经安装docker(docker版本需要高于17.06，推荐18.06),安装参照[docker 安装教程](https://docs.docker.com/install/overview/)
   
   
3. 制作镜像。 
   1. 搜索基础镜像，基础镜像需要集成jre。 **docker search jre8**
      
   
   2. 选择合适的镜像（镜像需要集成了jre且版本不低于8）
      ```
      NAME                 DESCRIPTION   STARS     OFFICIAL   AUTOMATED
      livingobjects/jre8   Jre8 image    4         [OK]
      ```
      ![](https://support.huaweicloud.com/devg-iotedge/public_sys-resources/note_3.0-zh-cn.png)
      livingobjects/jre8镜像是docker hub第三方提供的镜像，非IoT团队发布，且IoT团队未提供任何官方镜像。该镜像在此仅做示例，IoT团队对该镜像的安全性不作保证。强烈建议用户自己封装镜像！
      
   
   3. 拉取镜像 **docker pull livingobjects/jre8**
      
   
   4. 编写dockerfile制作镜像
      dockerfile内容参照如下（具体可参考[编写高效的Dockerfile](https://support.huaweicloud.com/bestpractice-swr/swr_bestpractice_0002.html) ）
      ```
      #Version 1.0.0
      FROM livingobjects/jre8  #基础镜像来源
      RUN mkdir -p /opt/iot/edge/monitor / && chmod -R 777 /opt/ #授权
      COPY monitor /opt/iot/edge/monitor   #复制文件到指定目录,此dockerfile文件位置:/home,jar包位置:/home/monitor
      USER root     #用户名
      EXPOSE 8080
      CMD ["java", "-jar", "/opt/iot/edge/monitor/monitor-app.jar", "run"] #运行命令
      ```
      
   
   5. 构建镜像 **docker build -t edge_monitor:1.0.0 /home --no-cache**
      
      
   
   6. 查看打包完成的镜像
      **docker images**
      ```
      REPOSITORY      TAG      IMAGE ID       CREATED          SIZE
      edge_monitor    1.0.0    93f9d964bcea   12 seconds ago   243MB
      ```
      
   
   
   
   
4. 镜像上传。 
   1. 上传镜像 开通容器镜像服务SWR
      镜像上传需要使用SWR镜像容器服务，开通及使用请参照[容器镜像服务 SWR_用户指南](https://support.huaweicloud.com/usermanual-swr/swr_01_0009.html)
      
   
   2. 获取SWR登录指令 请参照[使用容器引擎客户端上传镜像](https://support.huaweicloud.com/qs-swr/index.html)第四节。
      
   
   3. tag镜像 使用tag命令将镜像重命名以确定上传位置和组织，获取上传位置和组织前缀请参考[pull/push命令](https://console.huaweicloud.com/swr/?agencyId=050b1aaac480252c1fa0c002cde0bbbb&locale=zh-cn#/app/experience/pullpush)
      **docker tag edge_monitor:1.0.0 swr.cn-north-4.myhuaweicloud.com/hw_swr/edge_monitor:1.0.0**
      
   
   4. 上传镜像 **docker push swr.cn-north-4.myhuaweicloud.com/hw_swr/edge_monitor:1.0.0**
      
   
   5. 查看上传结果 ![](https://support.huaweicloud.com/devg-iotedge/figure/zh-cn_image_0000001120411760.png "点击放大")
      
   
   6. 上传镜像后请在SWR将镜像设置为公开。
   
   
   
   
 
#### 插件包打包
1. 插件包制作。 
   1. 插件包格式要求如下： 插件包仅支持.tar.gz 、.tar或者 .zip格式。
      插件包结构如下：
      app.zip
      ├── \*\*\*\*.jar //可执行jar文件,必须
      ├── start.sh //启动脚本 必须文件 当前不提供参数方式启动
      └── stop.sh //停止脚本 非必须
      
   
   2. 构建插件包。 以monitor-app为例，在项目打包后得到monitor-app.jar
      在monitor-app.jar文件的同目录下创建start.sh,内容如下:
      ```
      function log(){
          echo "`date "+%Y-%m-%d %T"`: $1"
      }
      log "[INFO] start execut process."
      #调试时可打开，确认sdk需要的环境能被获取
      #echo "${device_id}" > test_enviroment.file
      pwd
      #更新环境变量，防止找不到java命令。
      source /etc/profile
      #运行文件在/var/IoTEdge/downloaded-job/run下面
      java -jar ./monitor-app.jar  > monitor_running.log  2>&1
      ```
      将monitor-app.jar和start.sh一起压缩得到monitor-app.zip。
      
   
   
   
   
2. 插件包上传。 
   1. 开通对象存储服务OBS。 进程包上传方式需要开通对象存储服务OBS，请参考[对象存储服务 OBS_快速入门](https://support.huaweicloud.com/qs-obs/obs_qs_0001.html)
      
   
   2. 上传进程包。
      上传方式请参照[对象存储服务(OBS)](https://console.huaweicloud.com/console/#/obs/manager/buckets)。
      ![](https://support.huaweicloud.com/devg-iotedge/public_sys-resources/caution_3.0-zh-cn.png)
      请设置桶策略为【公开读】，如未设置请前往OBS首页-\>单击桶ID-\>访问权限控制-\>桶策略中设置。
      
   
   
   
   
 
