更新时间:2024-09-04 GMT+08:00
分享

制作镜像包或插件包

若制作镜像包以容器化方式部署应用,不支持在一个容器内运行多个集成ModuleSDK的软件进程或者重启集成ModuleSDK的软件进程,会导致鉴权失败等问题。

镜像包打包

  1. 构建需要打包的项目

    构建项目,此处示例,构建好的文件存放在目录 /home/ModuleSDK-Demo 下

  2. 安装docker

    请确认您使用的系统已经安装Docker(Docker版本需要高于17.06,推荐18.06),安装方法可参照docker 安装教程

  3. 制作镜像

    1. 搜索基础镜像。
      docker search dotnet
    2. 根据您的工程配置,选择合适的镜像。

      镜像需要集成与您的工程配置兼容的.Net运行环境,下文使用的.Net版本仅作演示。

    3. 拉取镜像。
      docker pull mcr.microsoft.com/dotnet/runtime:2.1

      mcr.microsoft.com/dotnet/runtime:2.1 镜像是微软提供的镜像,非IoT团队发布,且IoT团队未提供任何官方镜像。该镜像在此仅做示例,IoT团队对该镜像的安全性不作保证,强烈建议用户自己封装镜像!

    4. 编写 Dockerfile 制作镜像。

      创建 Dockerfile,内容示例如下(具体可参考编写高效的Dockerfile )。

      下面提供了ModuleSDK-Demo镜像构建样例,仅作示例展示,请按需修改。

      # 基础镜像来源
      FROM mcr.microsoft.com/dotnet/runtime:2.1
      
      # 指定工作目录
      WORKDIR /app
      
      # 复制工程二进制文件和相关文件(即项目构建发布的产物)
      COPY ModuleSDK-Demo/ /app
      
      ENTRYPOINT ["dotnet", "ModuleSDK-Demo.dll"]
    5. 构建镜像
      docker build -t modulesdk-demo:1.0.0 -f Dockerfile .
    6. 查看打包完成的镜像
      docker images
      可以看到modulesdk-demo这个镜像已经制作完成。
      REPOSITORY       TAG         IMAGE ID       CREATED         SIZE
      modulesdk-demo   1.0.0     85ed3c3dc738   8 minutes ago    182MB

    上述步骤演示的是直接复制已编译好的工程文件来构建镜像,您也可以采取在构建镜像时编译的方式,具体可参照.Net 官方文档的指引。

  4. 镜像上传

    1. 上传镜像

      镜像上传需要使用镜像容器服务(SWR),首先需要开通容器镜像服务(SWR)。开通及使用请参照容器镜像服务(SWR)

    2. 获取 SWR 登录指令

      获取登录指令请参照获取指令

      访问密钥即AK/SK(Access Key ID/Secret Access Key),获取的AK/SK将用于登录。

    3. 登录 SWR 仓库
      docker login -u [区域项目名]@[AK] -p [登录密钥] [镜像仓库地址]

      可以直接从控制台获取登录命令,如下图。

      镜像仓库地址 = swr.区域项目名称.myhuaweicloud.com

      例如,华北-北京一对应的镜像仓库地址为:swr.cn-north-1.myhuaweicloud.com

    4. 修改镜像所属组织

      修改镜像的组织名,以便推送到个人组织内。

      docker tag [OPTIONS] [镜像名:版本号] [镜像仓库地址/所属组织/镜像名:版本号]

      例如:

      docker tag modulesdk-demo:1.0.0 swr.cn-north-4.myhuaweicloud.com/iotedge/modulesdk-demo:1.0.0
    5. 上传镜像
      docker push [镜像仓库地址/所属组织/镜像名:版本号]
      例如:
      docker push swr.cn-north-4.myhuaweicloud.com/iotedge/modulesdk-demo:1.0.0
    6. 我的镜像查看上传结果

    7. 上传镜像后请在 SWR 将镜像设置为公开。

      查看镜像详情:

      编辑镜像:

      设置为公开:

      这一步很重要,关系到后面能否正常部署应用。

插件包打包

  1. 插件包制作

    1. 插件包格式要求

      插件包仅支持.tar.gz 、.tar或者 .zip格式。

      插件包结构如下:

      ModuleSDK-Demo.zip

      ├── ModuleSDK-Demo.*** // 可执行文件

      ├── ***.dll // 外部库文件,在构建发布时产生,可能会有多个

      ├── start.sh // 启动脚本 必须文件 当前不提供参数方式启动

      └── stop.sh // 停止脚本 非必须

      ModuleSDK-Demo.*** 为可执行文件,类型可能为.dll或.exe,取决于您的工程发布配置。下文将以ModuleSDK-Demo.dll为例。

    2. 添加启动脚本

      在可执行文件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
    3. 打包插件包

      压缩文件得到ModuleSDK-Demo.zip。

  2. 插件包上传

    1. 开通对象存储服务OBS

      进程包上传方式需要开通对象存储服务OBS,请参考对象存储服务 OBS_快速入门

    2. 上传进程包
      上传方式请参照对象存储服务(OBS)

      请设置桶策略为【公开读】,如未设置请前往OBS首页 > 单击桶ID > 访问权限控制 > 桶策略中设置

相关文档