制作镜像包或插件包
若制作镜像包以容器化方式部署应用,不支持在一个容器内运行多个集成ModuleSDK的软件进程或者重启集成ModuleSDK的软件进程,会导致鉴权失败等问题。
镜像包打包
- 上传需要打包的项目。将项目上传到网络能访问到的Linux机器上,放到目录下(比如 /home/MyCApp)。
- 安装docker。
请确认使用的系统已经安装docker(docker版本需要高于17.06,推荐18.06),安装方法可参照docker 安装教程。
- 制作镜像。
- 搜索基础镜像。
对基础镜像没有要求,可自行选择合适的基础镜像,以下选用带cmake的镜像作为示例
docker search cmake
- 选择合适的镜像(镜像需要集成了cmake且版本不低于3.9.5)
NAME DESCRIPTION STARS OFFICIAL AUTOMATED lycantropos/cmake CMake Docker image 3 [OK]
- 拉取镜像
lycantropos/cmake镜像是docker hub第三方提供的镜像,非IoT团队发布,且IoT团队未提供任何官方镜像。该镜像在此仅做示例,IoT团队对该镜像的安全性不作保证。强烈建议用户自己封装镜像!
docker pull lycantropos/cmake
- 添加启动脚本start.sh,放到项目文件下(和main.c在一个目录下)。
function log(){ echo `date "+%Y-%m-%d %T"`: $1 } log "[INFO] start execute process." # 这里的路径取决于项目保存的位置 cd /opt/iot/edge/MyCApp ./MyCApp
MyCApp为可执行文件,生成步骤可参考生成可执行文件
- 编写 Dockerfile 制作镜像
创建 Dockerfile,命名为 myapp-dockerfile 内容参照如下(具体可参考编写高效的Dockerfile )。
下面提供myapp-dockerfile 样例,请根据具体需要修改。
注意myapp-dockerfile需要和项目放到一个目录下。
#Version 1.0.0 # 基础镜像来源 # 如果不采用在镜像中编译源文件的方式,可以任意选择基础镜像 FROM lycantropos/cmake # 创建镜像文件目录,并且授权 RUN mkdir -p /opt/iot/edge/MyCApp/conf && chmod -R 777 /opt ENV docker_path=/opt/iot/edge/MyCApp ENV LD_LIBRARY_PATH=${docker_path}:$LD_LIBRARY_PATH WORKDIR ${docker_path} # 复制工程或文件到指定目录 COPY MyCApp/MyCApp $docker_path # 将依赖库和配置文件放到对应目录下,确保编译的时候不会出错 COPY MyCApp/lib /usr/lib COPY MyCApp/conf $docker_path/conf COPY MyCApp/start.sh $docker_path # 指定容器将要监听的端口 USER root EXPOSE 8082 ENTRYPOINT ["/bin/bash", "/opt/iot/edge/MyCApp/start.sh"]
- 构建镜像
docker build -f ./myapp-dockerfile -t my_app_docker:v1.0.0 ./
- 查看打包完成的镜像
docker images
可以看到my_app_docker这个镜像已经制作完成。REPOSITORY TAG IMAGE ID CREATED SIZE my_app_docker v1.0.0 983b4e5aa72a 10 minutes ago 1.51GB
- 搜索基础镜像。
- 镜像上传
以上步骤可以通过体验馆熟悉流程。
- 上传镜像
镜像上传需要使用镜像容器服务(SWR),首先需要开通容器镜像服务(SWR)。开通及使用请参照容器镜像服务(SWR)。
- 获取 SWR 登录指令
获取登录指令请参照获取指令。
访问密钥即AK/SK(Access Key ID/Secret Access Key),获取的密钥和AK将用于登录。
- 登录 SWR 仓库
docker login -u [区域项目名]@[AK] -p [登录密钥] [镜像仓库地址]
可以直接从控制台获取登录命令,如下图。
镜像仓库地址 = swr.区域项目名称.myhuaweicloud.com
例如,华北-北京一对应的镜像仓库地址为:swr.cn-north-1.myhuaweicloud.com
- 修改镜像所属组织
docker tag [OPTIONS] [镜像名:版本号] [镜像仓库地址/所属组织/镜像名:版本号]
例如,
docker tag my_app_docker:v1.0.0 swr.cn-north-4.myhuaweicloud.com/iotedge/my_app_docker:v1.0.0
- 上传镜像
docker push [镜像仓库地址/所属组织/镜像名:版本号]
例如,docker push swr.cn-north-4.myhuaweicloud.com/iotedge/my_app_docker:v1.0.0
- 在我的镜像查看上传结果
- 上传镜像后请在 SWR 将镜像设置为公开。
步骤二:
步骤三:
这一步很重要,关系到后面能否正常部署应用。
- 上传镜像
插件包打包
- 插件包制作。
- 插件包格式要求如下:
插件包结构如下:
monitor-app.zip
├── MyCApp // 可执行文件
└── stop.sh //停止脚本 非必须
│ ├─lib
│ │ ├─libmodule.so //sdk库文件
│ │ └─***
│ ├─conf
│ │ ├─sdk_log.conf //sdk日志配置
│ │ ├─module.dat //sdk需要的密钥
│ │ ├─rootcert.pem //证书
└────start.sh //启动脚本 必须文件 当前不提供参数方式启动
MyCApp为可执行文件,生成步骤可参考生成可执行文件
打包的文件至少需要包括lib和conf两个目录(目录下所有文件),加启动脚本start.sh和可执行文件 MyCApp 。
- 添加启动脚本
在可执行文件MyCApp的同一目录下创建启动脚本start.sh,内容如下
log(){ echo `date "+%Y-%m-%d %T"`: $1 } log "[INFO] start execute process." # 指定添加链接库 export LD_LIBRARY_PATH=$PWD/lib/:$LD_LIBRARY_PATH # 修改执行权限 chmod 755 MyCApp ./MyCApp > myapp_running.log 2>&1
通过安装包部署的文件会放在/var/IoTEdge/downloaded-job/run下面,包括生成的日志文件myapp_running.log。
- 构建插件包。
- 插件包格式要求如下:
- 插件包上传。
- 开通对象存储服务OBS。
进程包上传方式需要开通对象存储服务OBS,请参考对象存储服务 OBS_快速入门
- 上传进程包。
- 开通对象存储服务OBS。