制作镜像包或插件包
若制作镜像包以容器化方式部署应用,不支持在一个容器内运行多个集成ModuleSDK的软件进程或者重启集成ModuleSDK的软件进程,会导致鉴权失败等问题。
镜像包打包
- 构建需要打包的项目
构建项目,此处示例,构建好的文件存放在目录 /home/ModuleSDK-Demo 下
- 安装docker
请确认您使用的系统已经安装Docker(Docker版本需要高于17.06,推荐18.06),安装方法可参照docker 安装教程。
- 制作镜像
- 搜索基础镜像。
docker search dotnet
- 根据您的工程配置,选择合适的镜像。
镜像需要集成与您的工程配置兼容的.Net运行环境,下文使用的.Net版本仅作演示。
- 拉取镜像。
docker pull mcr.microsoft.com/dotnet/runtime:2.1
mcr.microsoft.com/dotnet/runtime:2.1 镜像是微软提供的镜像,非IoT团队发布,且IoT团队未提供任何官方镜像。该镜像在此仅做示例,IoT团队对该镜像的安全性不作保证,强烈建议用户自己封装镜像!
- 编写 Dockerfile 制作镜像。
创建 Dockerfile,内容示例如下(具体可参考编写高效的Dockerfile )。
下面提供了ModuleSDK-Demo镜像构建样例,仅作示例展示,请按需修改。
# 基础镜像来源 FROM mcr.microsoft.com/dotnet/runtime:2.1 # 指定工作目录 WORKDIR /app # 复制工程二进制文件和相关文件(即项目构建发布的产物) COPY ModuleSDK-Demo/ /app ENTRYPOINT ["dotnet", "ModuleSDK-Demo.dll"]
- 构建镜像
docker build -t modulesdk-demo:1.0.0 -f Dockerfile .
- 查看打包完成的镜像
docker images
可以看到modulesdk-demo这个镜像已经制作完成。REPOSITORY TAG IMAGE ID CREATED SIZE modulesdk-demo 1.0.0 85ed3c3dc738 8 minutes ago 182MB
上述步骤演示的是直接复制已编译好的工程文件来构建镜像,您也可以采取在构建镜像时编译的方式,具体可参照.Net 官方文档的指引。
- 搜索基础镜像。
- 镜像上传
- 上传镜像
镜像上传需要使用镜像容器服务(SWR),首先需要开通容器镜像服务(SWR)。开通及使用请参照容器镜像服务(SWR)。
- 获取 SWR 登录指令
获取登录指令请参照获取指令。
访问密钥即AK/SK(Access Key ID/Secret Access Key),获取的AK/SK将用于登录。
- 登录 SWR 仓库
docker login -u [区域项目名]@[AK] -p [登录密钥] [镜像仓库地址]
可以直接从控制台获取登录命令,如下图。
镜像仓库地址 = swr.区域项目名称.myhuaweicloud.com
例如,华北-北京一对应的镜像仓库地址为:swr.cn-north-1.myhuaweicloud.com
- 修改镜像所属组织
docker tag [OPTIONS] [镜像名:版本号] [镜像仓库地址/所属组织/镜像名:版本号]
例如:
docker tag modulesdk-demo:1.0.0 swr.cn-north-4.myhuaweicloud.com/iotedge/modulesdk-demo:1.0.0
- 上传镜像
docker push [镜像仓库地址/所属组织/镜像名:版本号]
例如:docker push swr.cn-north-4.myhuaweicloud.com/iotedge/modulesdk-demo:1.0.0
- 在我的镜像查看上传结果
- 上传镜像后请在 SWR 将镜像设置为公开。
编辑镜像:
设置为公开:
这一步很重要,关系到后面能否正常部署应用。
- 上传镜像
插件包打包
- 插件包制作
- 插件包格式要求
插件包仅支持.tar.gz 、.tar或者 .zip格式。
插件包结构如下:
ModuleSDK-Demo.zip
├── ModuleSDK-Demo.*** // 可执行文件
├── ***.dll // 外部库文件,在构建发布时产生,可能会有多个
├── start.sh // 启动脚本 必须文件 当前不提供参数方式启动
└── stop.sh // 停止脚本 非必须
ModuleSDK-Demo.*** 为可执行文件,类型可能为.dll或.exe,取决于您的工程发布配置。下文将以ModuleSDK-Demo.dll为例。
- 添加启动脚本
在可执行文件ModuleSDK-Demo.dll的同一目录下创建启动脚本start.sh,内容示例如下,可根据您的需要进行修改。
function log(){ echo "`date "+%Y-%m-%d %T"`: $1" } log "[INFO] start execut process." pwd dotnet ModuleSDK-Demo.dll > ModuleSDK_demo_running.log 2>&1
- 打包插件包
压缩文件得到ModuleSDK-Demo.zip。
- 插件包格式要求
- 插件包上传
- 开通对象存储服务OBS
进程包上传方式需要开通对象存储服务OBS,请参考对象存储服务 OBS_快速入门
- 上传进程包
上传方式请参照对象存储服务(OBS)。
请设置桶策略为【公开读】,如未设置请前往
。
- 开通对象存储服务OBS