教程

定制说明

iManager拥有一定的整合经过定制的Compose应用(行业应用)的能力,在已有的Compose应用中,时空云平台就是经过一定的定制后整合到iManager中,通过iManager来创建、管理、分发和监控时空云平台。

如果用户想把自己的应用通过iManager管理起来,需要参考以下操作进行定制:

Compose定制步骤

  1. 制作镜像

    把自己的应用Docker容器化,推荐使用Dockerfile的形式把自己的应用制作成Docker镜像,具体的镜像制作方式方法可以参考Docker官网的文档

  2. 编写docker-compose.yml文件

    docker-compose.yml文件的编写规则可以参考Docker官方文档

  3. 编写rule.yml文件

    使用YAML语言编写rule.yml文件,rule.yml文件的编写参见后文中规则文件编写说明

  4. 整合到iManager

    通过命令docker inspect imanager获取imanager-config位置,如图:

    gerimanagerconfiglocation

    然后在该路径的appSet文件夹下新建一个文件夹(该文件夹的名称将默认作为界面上Compose应用的名称),把上述步骤编写的docker-compose.yml文件和rule.yml放到该文件夹下。

  5. 使用定制后的Compose应用

    完成上述步骤1-4后,即可在iManager界面的左边菜单->Compose应用下看到自己定制的应用。您就可以创建、监控、管理您的Compose应用了。

规则文件编写说明

version: #规则文件版本,类型是String
appSetListPage: #处理compose应用列表页面
  serviceTemplate: #列表页面显示信息的模板,处理列表页面ip,端口的显示
    serviceName: #该serviceName为列表页面显示的地址所对应的服务的名称,该名称与docker-compose.yml文件中的service保持一致,类型是String
    urlTemplate: #url模板,类型是String
    portTemplate: #端口显示的模板,类型是String
    cluster: #是否是集群,这里的集群指的是利用nginx的单机集群,值为true或false
    clusterInternalPort: #针对有nginx的情况,指定nginx中的一个端口来显示到列表页上,类型是String
    specifyExposedPort: #当前容器是否要暴露指定端口,值为true或false
    specifyExposedPortLabelKey: #当前暴露的是哪个内部端口所对应的外部端口,类型是String
    appSetBaseName: #docker不允许创建中文名称的容器,所以为每一类compose应用指定了满足要求的基础名称,类型是String
createAppSetPage: #处理compose应用创建页面
- type: #元素的类型,见下面的详细介绍
  position: #元素的位置,值为basic或advanced,basic表示位于必填位置,advanced表示位于高级选项的位置
  portIndex: #端口元素的索引,类型是int
  serviceName: #元素背后所对应的容器服务名称,和docker-compose.yml文件中的服务名称对应,类型是String
  placementIndex: #多机规则文件中,placement的索引,类型是int
  display: #是否显示当前元素,值为true或false
  item: #元素条目,见下面的特别说明
    -name: #元素条目名称,类型是String
    description: #元素条目描述,类型是String
    readonly: #元素条目是否只读,值为true或false
    placeholder: #条目的placeholder,类型是String
    value: #条目默认的值,类型是String
    required: #条目是否是必需的,值为true或false
    secretCode: #是否以密文方式显示,用于设置密码,值为true或false
    reference: #是否是引用,值为true或false
    referenceKey: #引用的值,与对应的docker-compose.yml文件对应,类型是String
    validation: #条目数据的校验,见下面的详细介绍
    - !!com.supermap.imanager.commontypes.RuleRegexValidatio #校验类
      regex: #该属性是由当前所使用的类所决定的
      message: #该属性是由当前所使用的类所决定的
appSetDetailPage: #处理compose应用详情页面
  description: #页面左上角描述
  serviceTemplates: #页面每个服务所要显示的信息模板
  - serviceName: #页面要显示的地址所对应的服务的名称,通过这个服务名称,找到对应的docker容器,类型是String
    multiInternalPort: #是否存在多个暴露端口,值为true或false
    scale: #指定节点是否能够动态伸缩,值为true或false
    autoScale: #指定节点是否能够自动动态伸缩,值为true或false
    FTP: #指定节点是否是FTP容器,值为true或false
    showFTP: #指定节点是否显示“上传数据”按钮,值为true或false
    targetServiceName: #目标服务名称,这个服务名称与目标服务的serviceName保持一致,类型是String
    containerPortFilter: #容器端口过滤,若某个容器暴露了几个端口,可以通过该字段设置过滤,在图3的“容器端口”处只显示某一个端口,类型是List<String>
    urlTemplate: #url模板
      - urlTemplate: #url模板,类型是String
        internalPort: #容器内部端口,类型是String
    portTemplate: #端口显示的模板,类型是String
    specifyExposedPort: #当前容器是否要暴露指定端口,值为true或false
    specifyExposedPortLabelKey: #当前暴露的是哪个内部端口所对应的外部端口,类型是String
    description: #容器的描述信息,类型是String</pre>

createAppSetPage中type有如下几个值:

  • text:字符串类型,用于创建页面需要输入字符串的地方;
  • port:用于创建页面需要输入端口的地方;
  • replicate:特指多机创建时的“服务模式”,当type为replicate时,其item的第一个value只能是replicated或global,当value为replicated时,其“副本数量”的值由第二个value来决定,可参见如下示例。
- type: replicate
  position: advanced
  serviceName: namenode
  display: false
  item:
    - value: replicated
    - value: 1
- type: replicate
  position: advanced
  serviceName: datanode
  item:
    - readonly: true
      value: global
  • placement:特指多机创建时的“约束”,当type为placement时,其item的value只能是none,可参见如下示例。
- type: placement
  position: advanced
  serviceName: spark-worker
  placementIndex: 0
  item:
    - value: none

关于createAppSetPage中item的特别说明:

  • 在compose应用创建页面,输入名称这一条目,如图2的“MySQL名称”这一条目,不需要在rule.yml文件中进行定义,同时,如果是多机,除了名称这一条目外,“私有仓库地址”这一条目同样也不需要体现在rule.yml文件中。

关于createAppSetPage中validation的说明:

  • 目前提供com.supermap.imanager.commontypes.RuleRegexValidatio(正则表达式的校验)和com.supermap.imanager.commontypes.RuleStringLengthValidatio(字符串的校验)这两个类。正则表达式的校验类提供regex和message这两个属性,字符串的校验类提供stringLength、stringLengthMin、stringLengthMax和message这四个属性。参见如下示例:
validation:
  - !!com.supermap.imanager.commontypes.RuleStringLengthValidatio
    stringLength: true
    stringLengthMin: 20
    stringLengthMax: 100
    message: "长度只能在20-100之间"

以下是SuperMapiManager产品中自带的Compose应用“MySQL”的rule.yml文件的详细介绍:

version:
appSetListPage: #见图1
  serviceTemplate:
    serviceName: phpmyadmin
    urlTemplate: "http:#%1$s:%2$s"
    appSetBaseName: mysql #如图2中创建出来的容器"mysql3_mysqldb_1"和 "mysql3_phpmyadmin_1"这两个名称的前缀“mysql”
createAppSetPage: #见图2
  - type: text
    position: basic
    item: #“设置root用户密码”这一条目
      - name: "ROOT_PASSWORD" #与docker-compose.yml文件中保持一致
        description: "设置root用户密码" #如图2左侧一列的“设置root用户密码”
        readonly: false #不是只读,如图可以填写密码
        placeholder: "e.g.root" #在填写密码前,默认有个placeholder为“e.g.root”
        required: true
        secretCode: true #输入的密码以密文方式显示
  - type: port
    position: advanced
    item: #“mysqldb外部端口”这一条目
      - name: "MYSQL_EXPOSE_PORT" #对应mysqldb的“主机端口”,与docker-compose.yml文件中保持一致
        description: "mysqldb外部端口"
        placeholder: "e.g.3306"
        validation:
          - !!com.supermap.imanager.commontypes.RuleRegexValidation
            regex: '^(102[4-9]|10[3-9]\d{1}|1[1-9]\d{2}|[2-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d{1}|6553[0-5])$'
            message: "端口只能在1024-65535之间" #当输入不在当前正则表达式范围内时出现该提示信息
      - name: "MYSQL_CONTAINER_PORT" #对应mysqldb的“容器端口”,与docker-compose.yml文件中保持一致
        value: 3306 #如图中不可编辑的3306
  - type: port
    item: #“phpmyadmin外部端口”这一条目
      - name: "PHPMYADMIN_EXPOSE_PORT"
        description: "phpmyadmin外部端口"
        placeholder: "e.g.80"
        validation:
          - !!com.supermap.imanager.commontypes.RuleRegexValidation
            regex: '^(102[4-9]|10[3-9]\d{1}|1[1-9]\d{2}|[2-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d{1}|6553[0-5])$'
            message: "端口只能在1024-65535之间"
      - name: "PHPMYADMIN_CONTAINER_PORT"
        value: 80
appSetDetailPage: #见图3
  description: "简单说明:\n1.MySQL使用的是官方5.7.12版本镜像\n2.可以通过phpmyadmin在浏览器中查看数据库\n3.用户可以通过MySQL容器暴露出来的IP和端口,远程连接数据库\n4.MySQL的root用户密码为: " #见左上角的详细信息
  serviceTemplates:
    - serviceName: mysqldb #与docker-compose.yml文件中的services保持一致
      urlTemplate: "jdbc:mysql:#%1$s:%2$s" #对应图3中的“地址”
      portTemplate: "%1$s" #对应图3中的 "容器端口"
      description: MySQL数据库 #对应图3中的“容器描述”
    - serviceName: phpmyadmin
      urlTemplate: "http:#%1$s:%2$s"
      portTemplate: "%1$s"
      description: MySQL的WEB客户端

appsetlistpage

createappsetpage

appsetdetailpage

高级配置

  1. 可以通过”list.json”或”list_en.json”文件,映射自己Compose应用的名称。并且”list.json”或”list_en.json”文件中的顺序可以决定Compose应用在UI上显示的顺序。如何获取”list.json”或”list_en.json”文件请参考以下步骤:

    • 执行以下命令找到imanager-config挂载路径

      docker inspect --format '{{(index .Mounts 3).Source}}' imanager
    • 进入以下路径,即可找到”list.json”或”list_en.json”文件,其中:{imgr-config-path}为上步中获取的imanager-config挂载路径

      cd {imgr-config-path}/appSet
  2. docker-compose.yml文件支持使用.env文件,放置在docker-compose.yml文件所在目录即可。
  3. 如果您想让你定制的Compose应用支持多机部署,您只需要在对应的单机文件夹下新建一个名为 “multi-node “的文件夹,里面放的内容同单机一样:docker-compose.yml、rule.yml和.env文件(根据需要决定)。