在BDOS上发布自定义应用

by tim 2018-02-09

目录


简介
发布Tomcat应用
发布Dcoker应用


简介

这个教程主要是帮助使用者在BDOS平台上发布tomcat应用或者docker应用

主要场景为:
1. 在 自定义应用安装->Tomcat应用 页面上传war包,发布tomcat应用
2. 按照规范打包应用,在自定义应用安装-> Docker应用 页面上传应用包,发布Docker应用。(⚠️注意:请先学习下Dockerfile编写语法)

 

1. 发布tomcat应用

以下应用都以helloworld.war作为例子

1.1 构建war包

可以直接下载上面提供的helloworld.war进行下面的测试。
如果是上传自己制作的war包,打包前,请确认以下资源是否设置正确:
1. 数据库链接
2. 日志信息:请将日志输出目录指定为 /usr/local/tomcat/logs/helloworld.log,比如您的工程使用log4j.properties,修改下面一项
log4j.appender.RollingFile.File=/usr/local/tomcat/logs/helloworld.log

 

1.2 安装应用
  1. 在左侧菜单中找到 自定义应用安装 -> Tomcat应用, 点击菜单

  2. 如果是首次安装这个应用,请将 [全新安装] 按钮置亮;否则点击置为灰色,然后选中需要更新版本的应用名称

  3. 点击“浏览应用压缩包”,选择应用war包helloworld.war,如果是全新安装,页面会自动填充应用名称
  4. 请选择合适的tomcat-version

  5. 根据实际需要填写以下参数

字段名称 描述
cpus 1 cpus个数(必填)
mem 512 内存大小,单位为m(必填) )
disk 1024 存储大小,单位为m(必填)
instances 1 实例个数,用于负载均衡(必填)
sticky-session false 是否开启会话保持
如果启动instances大于等于2,并且有会话保持的需求,请一定要开启sticky-session,否则请求访问会存在问题

6.点击右上角的 [安装] 按钮,会上传war包。当右上角的上传进度变为100%后,会自动用docker构建应用新的版本,页面显示具体构建日志。构建过程中,常见的错误请见附录一里的 3. 安装常见问题

1.3 启动应用
  1. 在左侧菜单中找到 已安装应用 -> 自定义应用, 点击菜单,可以看到所有已安装的应用,eg: helloworld,包括历史版本。

  2. 如果当前应用未处于运行状态,请选择应用启动的版本

  3. 如果当前应用已处于运行状态,请在左侧菜单中找到 当前运行的应用 -> 自定义应用,进去页面,暂停应用。然后再选择应用启动的版本

1.4 重启/暂停/移除/配置

在 当前运行的应用 -> 自定义应用 页面可以对已安装的应用做如下操作:重启/暂停/移除/配置

  • 重启:如果程序处于运行状态,可以直接点击重启,然后会重启所有实例。
  • 暂停:停止程序应用,如果在marathon.json里做了local persistent volume(具体解释,请参见附录 5. local persistent volume),会保留数据。
  • 移除:停止程序应用,如果在marathon.json里做了local persistent volume(具体解释,请参见附录 5. local persistent volume),同时会移除数据。
  • 配置:可以直接修改cpu, mem(内存), disk, instances(实例数),然后会自动重启应用。

 

1.5 验证应用
  1. 请在左侧菜单中找到 当前运行应用 -> 自定义应用,查看应用是否处于running状态,如果是,请点击应用,进入应用运行页面

  2. 点击 运行中的应用实例 表格里 主机 这一列里的 第一个端口,会打开一个新页面,即是tomcat主页,在地址后面输入应用路径hellworld,则可以验证应用是否可以正常访问

 

1.6 查看应用日志
  1. 在“运行中的应用实例”表格里“日志”这一列里可以查看程序标准输出日志,标准错误日志,程序日志文件。

  2. 点击“日志链接”后,会跳转到程序自己配置的日志目录,如下图,可以看到应用程序写到 /usr/local/tomcat/logs 下面到所有日志文件(⚠️注意:社区版不支持)

  3. 查看历史应用实例,在“运行中的应用实例”下面一个栏目[历史应用实例]会显示最近10条运行记录,同样可以点击[标准错误], [标准输出]查看日志

 

2. 发布Docker应用

Docker应用安装流程跟发布Tomcat应用一样,只是在应用打包上有所不同,具体差异见下。其中2.1.1和2.1.2是两个不同的例子,流程都是一样的,只是Dockerfile不同

2.1 构建应用包
2.1.1 构建java应用

可以直接下载helloworld.tgz
1) 通过Docker发布应用,需要将以下文件打成一个包

文件 描述
Dockfile 必须,程序镜像语法文件
marathon.json.mustache 必须,程序发布资源定义文件
settings.json 必须,变量定义文件
logviewer.part.yaml.mustache 必须,日志规则文件
helloworld.jar 非必须,程序包

2) 新建 Dockerfile 文件, 具体解释请参考:docker/docs, 复制下面内容

FROM java:8
WORKDIR /usr/src/app
ADD HelloWorld.jar ./
ADD log4j-1.2.16.jar ./
CMD [ "java", "-cp", "./log4j-1.2.16.jar:./HelloWorld.jar", "HelloWorld"]

3) 新建marathon.json.mustache文件, 复制下面内容

{
    "id": "{{group}}-{{app}}",
    "cpus": {{cpus}},
    "mem": {{mem}},
    "disk": {{disk}},
    "instances": {{instances}},
    "container": {
        "type": "DOCKER",
        "volumes": [{
            "containerPath": "/usr/src/app/logs/",
            "hostPath": "/var/log/{{group}}/{{app}}/{{app}}-{{version}}/",
            "mode": "RW"
      }],
        "docker": {
            "image": "{{docker-registry}}/{{group}}-{{app}}:{{version}}",
            "network": "BRIDGE",
            "parameters": [],
            "forcePullImage": true
        }
    },
        "healthChecks": [
        {
        "protocol": "COMMAND",
        "command": {
            "value": "echo 0"
        },
        "gracePeriodSeconds": 600,
        "intervalSeconds": 60,
        "timeoutSeconds": 20,
        "maxConsecutiveFailures": 5,
        "ignoreHttp1xx": false
        }
        ]
    }
  • docker应用在Marathon之上运行, 需要提供类似这样的配置文件, 具体使用可以通过Marathon Applications 进行了解.
  • group: 应用所属的组, 安装应用的时候会提供选择
  • app: 应用的安装名称, 安装应用的时候会提供填写
  • version: 应用安装版本, 安装应用的时候会提供选择
  • docker-registry: 系统变量, docker镜像中心的注册地址, 可以查看Docker Registry进一步了解
  • containerPath:请填写应用日志输出的目录

4) 新建settings.json文件, 复制下面内容

{
    "cpus": 1,
    "mem": 1024,
    "disk": 1024,
    "instances": 1
}
  • cpus: 应用需要分配的cpu个数
  • mem: 应用需要分配的内存大小, 单位是MB
  • disk: 应用需要分配的硬盘大小, 单位是MB
  • instances: 应用需要启动的实例个数

5) 新建logviewer.part.yaml.mustache文件, 复制下面内容

  - job: "{{group}}-{{app}}"
    dir: "/root/var/log/{{group}}/{{app}}/"
    files:
      - filename: "*"
        expr:

6) 将以上文件全选打包成以下格式之一:zip/tgz。注意,不要在这些文件的上层目录打包,否则会多一级目录。
linux下打包tgz, 命令如下

tar cvfz helloworld.tgz .

windows下打包tgz,请参见附录1.windows下7-zip打包

2.1.2 构建多war包tomcat应用

可以直接下载tomcatmulti.tgz

1) 通过Docker发布应用,需要将以下文件打成一个包

文件 描述
Dockfile 必须,程序镜像语法文件
marathon.json.mustache 必须,程序发布资源定义文件
settings.json 必须,变量定义文件
logviewer.part.yaml.mustache 必须,日志规则文件
sample1.war 必须,程序包
sample2.war 可选,程序包

2) 新建 Dockerfile 文件, 具体解释请参考:docker/docs, 复制下面内容

FROM tomcat:9.0.1-jre8

RUN echo "Asia/Shanghai" > /etc/timezone
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ADD ./*.war /usr/local/tomcat/webapps/

EXPOSE 8080 8081

CMD chmod +x /usr/local/tomcat/bin/*.sh && export JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT+08" && bash /usr/local/tomcat/bin/startup.sh && tail -f logs/catalina.out

3) 新建marathon.json.mustache文件, 复制下面内容

{
  "id": "{{group}}-{{app}}",
  "cpus": {{cpus}},
  "mem": {{mem}},
  "disk": {{disk}},
  "instances": {{instances}},
  "container": {
      "type": "DOCKER",
      "volumes": [{
        "containerPath": "/usr/local/tomcat/logs/",
        "hostPath": "/var/log/{{group}}/{{app}}/{{app}}-{{version}}/",
        "mode": "RW"
        }],
      "docker": {
      "image": "{{docker-registry}}/{{group}}-{{app}}:{{version}}",
      "network": "BRIDGE",
      "portMappings": [
        {
          "containerPort": 8080,
          "hostPort": 0,
          "servicePort": {{marathon-lb-port}},
          "protocol": "tcp",
          "labels": {"VIP_0": "{{tomcat-vip}}"}
        }
      ],
      "parameters": [
        {"key": "env", "value": "TEST=test"}
      ],
      "forcePullImage": true
    }
  },
  {{#sticky_session}}
  "labels":{
     "HAPROXY_GROUP":"internal",
     "HAPROXY_0_MODE" : "tcp",
     "HAPROXY_0_BALANCE" : "source",
     "HAPROXY_0_BIND_OPTIONS" : "accept-proxy"
  },
  {{/sticky_session}}
  "healthChecks": [
    {
      "path": "/",
      "protocol": "TCP",
      "portIndex": 0,
      "gracePeriodSeconds": 600,
      "intervalSeconds": 60,
      "timeoutSeconds": 20,
      "maxConsecutiveFailures": 5,
      "ignoreHttp1xx": false
    }
  ]
}
  • docker应用在Marathon之上运行, 需要提供类似这样的配置文件, 具体使用可以通过Marathon Applications 进行了解.
  • group: 应用所属的组, 安装应用的时候会提供选择
  • app: 应用的安装名称, 安装应用的时候会提供填写
  • version: 应用安装版本, 安装应用的时候会提供选择
  • docker-registry: 系统变量, docker镜像中心的注册地址, 可以查看Docker Registry进一步了解
  • containerPath:请填写应用日志输出的目录

4) 新建settings.json文件, 复制下面内容

{
  "disk": "512",
  "mem": "512",
  "cpus": "0.25",
  "instances": "1",
  "marathon-lb-port":"0",
  "tomcat-vip":"6.7.6.2:6761",
  "export-vip":"6.7.6.2:6762",
  "sticky_session":false
}
  • cpus: 应用需要分配的cpu个数
  • mem: 应用需要分配的内存大小, 单位是MB
  • disk: 应用需要分配的硬盘大小, 单位是MB
  • instances: 应用需要启动的实例个数

5) 新建logviewer.part.yaml.mustache文件, 复制下面内容

  - job: "{{group}}-{{app}}"
    dir: "/root/var/log/{{group}}/{{app}}/"
    files:
      - filename: "*"
        expr:

6) 将以上文件全选打包成以下格式之一:zip/tgz。注意,不要在这些文件的上层目录打包,否则会多一级目录。
linux下打包tgz, 命令如下

tar cvfz tomcatmulti.tgz .
2.2 查看应用
  1. 安装,运行,查看,检查所有步骤与tomcat的相关步骤一致。

附录

1. windows下7-zip打包

windows下打包需要7-zip,64位可以直接点击下载
7-zip
具体步骤如下:

1.1 下载7-ZIP,安装后直接在你想要打包的文件上点右键菜单,会有一个7-ZIP的子菜单栏。
然后选“7-ZIP”->“添加到压缩档案”,在弹出来的窗口里有个“压缩格式”的选项,里面有一个tar格式,第一步先压成tar格式。

1.2 在这个tar文件上面点右键,选 7-zip-> 添加到压缩档案,选择gzip,最后结果就是一个新的tar.gz格式的文件。

最后请将包名由xxx.tar.gz改为xxx.tgz。
至此,在windows下面得到tgz完成!

2. 打包常见问题
  1. 请注意打包的目录层级,如果通过工具打包,一定要选中所有文件打包,而不是在上层目录打包
  2. 请使用命令或者工具打包,不要通过重命名改变包的格式
  3. 特别是程序包,比如war包,请确保war包可以在本地tomcat解压成功

3. 安装常见问题

在Docker安装过程中,会显示详细日志,如果缺少必要的文件,会红色显示错误信息

4. 启动常见问题

请确保分配的cpus,mem,disk等资源合理

5. local persistent volume

docker是无状态的,在某些情况下,需要做主机文件映射到docker里,并且每次发布都只能在这个主机,这个时候需要做local persistent volume固定docker的运行主机。如果在页面上做“移除”操作,将会导致这个docker下次发布是个全新的环境,不能继续自动挂载之前主机上映射的资源。
详细内容可以参见Local Persistent Volumes

如果对教程有任何疑问,请截图发邮件至 admin@linktime.cloud

留言

评论

${{item['author_name']}} 回复 ${{idToContentMap[item.parent] !== undefined ? idToContentMap[item.parent]['author_name'] : ''}} · ${{item.date.slice(0, 10)}} 回复

暂时还没有一条评论.