教程
定制说明
iManager拥有一定的整合经过定制的Compose应用(行业应用)的能力,在已有的Compose应用中,时空云平台就是经过一定的定制后整合到iManager中,通过iManager来创建、管理、分发和监控时空云平台。
如果用户想把自己的应用通过iManager管理起来,需要参考以下操作进行定制:
Compose定制步骤
-
制作镜像
把自己的应用Docker容器化,推荐使用Dockerfile的形式把自己的应用制作成Docker镜像,具体的镜像制作方式方法可以参考Docker官网的文档。
-
编写docker-compose.yml文件
docker-compose.yml文件的编写规则可以参考Docker官方文档。
-
编写rule.yml文件
使用YAML语言编写rule.yml文件,rule.yml文件的编写参见后文中规则文件编写说明。
-
整合到iManager
通过命令docker inspect imanager获取imanager-config位置,如图:
然后在该路径的appSet文件夹下新建一个文件夹(该文件夹的名称将默认作为界面上Compose应用的名称),把上述步骤编写的docker-compose.yml文件和rule.yml放到该文件夹下。
-
使用定制后的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客户端
高级配置
-
可以通过”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
-
- docker-compose.yml文件支持使用.env文件,放置在docker-compose.yml文件所在目录即可。
- 如果您想让你定制的Compose应用支持多机部署,您只需要在对应的单机文件夹下新建一个名为 “multi-node “的文件夹,里面放的内容同单机一样:docker-compose.yml、rule.yml和.env文件(根据需要决定)。