GVKun编程网logo

docker tomcat 部署war包 报错 : JVMCFRE003 bad major version;(dockerfile tomcat war)

14

最近很多小伙伴都在问dockertomcat部署war包报错:JVMCFRE003badmajorversion;和dockerfiletomcatwar这两个问题,那么本篇文章就来给大家详细解答一下

最近很多小伙伴都在问docker tomcat 部署war包 报错 : JVMCFRE003 bad major version;dockerfile tomcat war这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展003-tomcat配置文件-server、tomcat-users、2019-09-20 docker 安装Tomcat ,部署war包、centos 7 中安装 docker和创建 tomcat容器并部署web应用、docker tomcat jvm 使用 visualVM监控等相关知识,下面开始了哦!

本文目录一览:

docker tomcat 部署war包 报错 : JVMCFRE003 bad major version;(dockerfile tomcat war)

docker tomcat 部署war包 报错 : JVMCFRE003 bad major version;(dockerfile tomcat war)

原因是因为jdk版本不一致

这是docker 引擎中tomcat容器内部的jdk版本

在这里插入图片描述

(我的idea jdk版本)查看idea中jdk版本(maven…project Structure…java compiler中改变jdk版本)

在这里插入图片描述

报错

在这里插入图片描述

统一版本后!

在这里插入图片描述ok

003-tomcat配置文件-server、tomcat-users

003-tomcat配置文件-server、tomcat-users

1、server.xml讲解

位于conf下

<?xml version="1.0" encoding="UTF-8"?>
  
  <!-- Server代表一个 Tomcat 实例。可以包含一个或多个 Services,其中每个Service都有自己的Engines和Connectors。
       port="8005"指定一个端口,这个端口负责监听关闭tomcat的请求
  -->
  <Server port="8005" shutdown="SHUTDOWN">
    <!-- 监听器 -->
    <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
   <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
   <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
   <!-- 全局命名资源,定义了UserDatabase的一个JNDI(java命名和目录接口),通过pathname的文件得到一个用户授权的内存数据库 -->
   <GlobalNamingResources>
     <Resource name="UserDatabase" auth="Container"
               type="org.apache.catalina.UserDatabase"
               description="User database that can be updated and saved"
               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
               pathname="conf/tomcat-users.xml" />
   </GlobalNamingResources>
   <!-- Service它包含一个<Engine>元素,以及一个或多个<Connector>,这些Connector元素共享用同一个Engine元素 -->
   <Service name="Catalina">
     <!-- 
         每个Service可以有一个或多个连接器<Connector>元素,
         第一个Connector元素定义了一个HTTP Connector,它通过8080端口接收HTTP请求;第二个Connector元素定
         义了一个JD Connector,它通过8009端口接收由其它服务器转发过来的请求.
     -->
     <Connector port="8080" protocol="HTTP/1.1"
                connectionTimeout="20000"
                redirectPort="8443" />
     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
     <!-- 每个Service只能有一个<Engine>元素 -->
     <Engine name="Catalina" defaultHost="localhost">
       <Realm className="org.apache.catalina.realm.LockOutRealm">
         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                resourceName="UserDatabase"/>
       </Realm>
       <!-- 默认host配置,有几个域名就配置几个Host,但是这种只能是同一个端口号 -->
       <Host name="localhost"  appBase="webapps"
             unpackWARs="true" autoDeploy="true">
       <!-- Tomcat的访问日志,默认可以关闭掉它,它会在logs文件里生成localhost_access_log的访问日志 -->
         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                prefix="localhost_access_log" suffix=".txt"
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
       </Host>
       <Host name="www.lhx.com"  appBase="webapps"
             unpackWARs="true" autoDeploy="true">
         <Context path="" docBase="/myweb1" />
         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                prefix="hzg_access_log" suffix=".txt"
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
       </Host>
     </Engine>
   </Service>
 </Server>

 访问http://localhost:8080/aaahttp://www.lhx.com/8080/aaa效果一致。

1.1、Host节点下的appBase与Context下的docBase

appBase目录表示

  这个目录下面的子目录将自动被部署为应用。 
  这个目录下面的.war文件将被自动解压缩并部署为应用

docBase只是指向了你某个应用的目录,这个可以和appBase没有任何关系。

总结: 
  如果你想自己指定路径,那么应该在docBase里面 
  如果你想简单,那么直接把他们复制到appBase下面就行了

如果重复设置,也就是2个指向了一个目录,也能运行,但你的应用下面的每个子目录,其实是被部署为单独的应用的。 
如你的应用为myApp, 放在了 d:\project\myApp 里面有2个子目录 d:\project\myApp\images 、d:\project\myApp\js

你可以通过 
1 设置 appBase 指向 d:\project 来让系统自动部署 
2 你可以手工指定docBase到 d:\project\myApp 
3 如果你指定了 appBase到 d:\project\myApp 那么 d:\project\myApp\images这个将不再是普通的子目录,而是一个单独的虚拟目录,或者叫应用了。因为其被自动部署 
d:\project\myApp\js 也一样的后果

<!--appBase 下面加了一行docBase,把路径配置到docBase中,把appBase为空,就OK了-->

  <Host name="localhost"  appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">

   <Context path="test1" docBase="D:\\JavaWebTest" debug="0" reloadable="true" crossContext="true"/>

访问:http//localhost:8080/test1/即可

 1.2、不同于Catalina/localhost/xxx.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase = "D:\\JavaWebTest\xxx" path="xxx"></Context>

在tomcat的conf/Catalina/localhost目录下创建一个xxx.xml文件

 启动tomcat,然后访问:http//localhost:8080/xxx  即可

 path:指访问路径

 docBase:指项目路径

当然也可指向

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase = "D:\\JavaWebTest\" ></Context>

直接访问 :http//localhost:8080 即可

尽管也允许直接在server.xml文件中配置<Context>元素,但不提倡采用这种方式。

问题一、Tomcat 错误“inside the host appBase has been specified, and will be ignored”

错误信息:

警告: A docBase D:/Tomcat/webapps/myApp inside the host appBase has been specified, and will be ignored

错误原因:
  假设要部署工程 "myApp", 放到了 ${catalina.home}/webapps 下。(这相当于隐性的定义了一个 docBase ,指向" ${catalina.home}/webapps/myApp " )。

  同时在 /conf/Catalina/localhost 下建立了配置文件 myApp.xml ,在其中定义了 docBase , 目标指向 " ${catalina.home}/webapps/myApp " 。

  这样,在 Tomcat 启动的时候,先找到了 myApp.xml 配置文件中定义的 docBase, 然后 Tomcat 自动检测 ${catalina.home}/webapps 下是否存放了合法的工程,并自动加载(根据配置文件的设置)。这样,Tomcat 又找到了一个相同的 docBase, 所以输出了错误信息。 

解决办法:
  将 myApp 工程 从 ${catalina.home}/webapps 目录移出, 然后 修改 配置文件 myApp.xml 指向该目录。

2、tomcat-users.xml:配置Tomcat的server的manager信息

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
<role rolename="manager-gui"/>
<user username="manager" password="manager" roles="manager-gui"/>
</tomcat-users>

 

 

 

df 

2019-09-20 docker 安装Tomcat ,部署war包

2019-09-20 docker 安装Tomcat ,部署war包

一、下载tomcat镜像

执行下面的命令,默认会下载最新版本的tomcat镜像

docker pull tomcat

二、启动tomcat

docker run -p 8081:8080 --name mytomcat

-p : 前边的8081是本机的端口,冒号后面的8080是docker容器的端口,tomcat默认是8080

–name : 是给容器起一个别名,方便使用,不然docker会默认给容器一个随机字符串的名称

执行完命令后,在命令行可以看到tomcat启动的日志。

  • 在浏览器输入:http://192.168.99.100:8081/,即可看到熟悉的tomcat首页界面

启动的时候,映射本地文件,但这个好像没什么卵用,

docker run --name tomcat  -p 8081:8080  -v /d/test/ljtao/test1:/urs/local/tomcat/wepapps  -d tomcat

 

三、部署项目到tomcat  (这个是关键

把项目打包成一个war包文件,这里暂时假设名称为demo.war,然后在war包所在的目录,执行以下命令:

docker cp demo.war mytomcat:/usr/local/tomcat/webapps

 也可以这样部署,当时前面的路径不能出现文件夹的名字包含空格的,否则会报错

docker cp d:\JavaTools\projectwar\test1.war mytomcat:/usr/local/tomcat/webapps
docker cp d:\JavaTools\projectwar\test1.war 646455ec77db:/usr/local/tomcat/webapps
646455ec77db 为tomcat的容器ID

war包会自动解压,然后执行下面命令重启容器

docker restart mytomcat

 

四、项目打包成war的处理

1、没有导出classes的文件出来,

解决:先用maven clean掉,再package

 

2、直到这个项目的目录下有这些文件

 

centos 7 中安装 docker和创建 tomcat容器并部署web应用

centos 7 中安装 docker和创建 tomcat容器并部署web应用

在 CentOS 7 中安装 Docker 和创建 Tomcat 容器并部署Web应用

一般部署Web应用都需要安装数据库,比如 MysqL 和 Redis,MysqL 和 Redis 属于多个Web应用公用的系统,所以就不需要安装到 Docker 里了,直接在操作系统里安装就好。所以,本文只讲解如何在 Docker 里创建 Tomcat 容器并部署Web应用,那么有人会问,在 Docker 里运行的应用如何访问安装在操作系统里的数据库呢?实践证明:在 Docker 容器里运行的Web应用可以直接访问安装在操作系统里的数据库(比如 MysqL 和 Redis),不需要任何特殊配置。

一、安装 Docker

1. 检查操作系统内核版本
检查操作系统内核版本,据说必须是3.10及以上。
# uname -r
3.10.0-862.9.1.el7.x86_64

2. 安装 Docker
使用 yum 命令安装 Docker。
# yum install docker
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: mirrors.huaweicloud.com
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.nwsuaf.edu.cn
base                                                     | 3.6 kB     00:00     
extras                                                   | 3.4 kB     00:00     
updates                                                  | 3.4 kB     00:00     
(1/2): extras/7/x86_64/primary_db                          | 205 kB   00:00     
(2/2): updates/7/x86_64/primary_db                         | 6.0 MB   00:00     
Resolving Dependencies
... ...
Complete!

3. 启动 Docker
[root@localhost /]# systemctl start docker

4. 查看 Docker 版本
# docker -v
Docker version 1.13.1,build 8633870/1.13.1

5. 设置开机自启动 Docker
# systemctl enable docker

二、安装 Tomcat 并部署WAR工程

1. 看 Docker 支持哪些版本的 Tomcat
打开 https://hub.docker.com/r/library/tomcat/ 查看 Docker 都支持哪些版本的Tocmat。

2. 在 Docker 里安装 Tomcat
在 Docker 里安装 Tomcat,拉取 Tomcat 镜像,不指定版本就是默认安装最新版,这里安装 8.5.35 版的。
# docker pull tomcat:8.5.35
Trying to pull repository docker.io/library/tomcat ... 
8.5.35: Pulling from docker.io/library/tomcat
bc9ab73e5b14: Pull complete 
193a6306c92a: Pull complete 
e5c3f8c317dc: Pull complete 
d21441932c53: Pull complete 
fa76b0d25092: Pull complete 
346fd8610875: Pull complete 
3ca5d6af9022: Pull complete 
c06cfa2cea32: Pull complete 
205950a5a114: Pull complete 
6332a55c669e: Pull complete 
723a722311b8: Pull complete 
f5b82bb44c57: Pull complete 
Digest: sha256:1b18333c03f68a64eb5dcc246984e89cf2d6737b04d95aa34cd337d8abfe796e
Status: Downloaded newer image for docker.io/tomcat:8.5.35 

3. 查看本地镜像
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/tomcat    8.5.35              6759d91a032b        6 days ago          463 MB

4. 基于镜像新建一个 Tomcat 容器并启动

注意,命令后面的 6759d91a032b 是前面拉取的 Tomcat 镜像ID!实践证明,如果用镜像名而不用镜像ID,那么就会自动拉取最新版的镜像使用,而不是刚才手动拉取的 8.5.35 版本的镜像。

# docker run --name tomcat8080 -v /etc/localtime:/etc/localtime:ro -d -p 8080:8080  6759d91a032b
Unable to find image 'tomcat:latest' locally
Trying to pull repository docker.io/library/tomcat ... 
latest: Pulling from docker.io/library/tomcat
Digest: sha256:1b18333c03f68a64eb5dcc246984e89cf2d6737b04d95aa34cd337d8abfe796e
Status: Downloaded newer image for docker.io/tomcat:latest
e3274a72e8d62a0f3022d3201405ce586147b3031c1232452d001ee41fb9c938

其中 “-v /etc/localtime:/etc/localtime:ro” 表示让容器使用宿主机的时间时区。
-v 标签为容器添加 volume,后面的 :ro 指定该 volume 为只读。
注意:如果容器中指定的挂载目录存在相同的文件时,会被宿主机覆盖掉。

如果想把 Tomcat 的 webapps 目录也挂载到宿主机目录(比如挂载到 /data/webapps),那么就是下面这样,需要再写个 -v 选项:
# docker run --name tomcat8080 -v /etc/localtime:/etc/localtime:ro -v /data/webapps:/usr/local/tomcat/webapps:rw -d -p 8080:8080 6759d91a032b
这时查看宿主机目录(/data/webapps)是空的,进入容器查看 webapps 目录也是空的,放一个 WAR 包应用到宿主机目录(/data/webapps)下,一会 WAR 包解压生成一个同名的文件夹,说明挂载 webapps 目录成功。

查看容器:
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                              NAMES
054f35167ec5        tomcat              "catalina.sh run"   4 seconds ago       Up 4 seconds        8080/tcp,0.0.0.0:8686->8686/tcp   tomcat8080

查看宿主机时间:
# date
Wed Apr 10 10:16:45 CST 2019

进入容器查看时间:
# docker  exec -it  tomcat8080   /bin/bash
root@054f35167ec5:/usr/local/tomcat# date
Wed Apr 10 10:16:50 CST 2019
与宿主机的时间一致。

但是 Tomcat 使用的时区还需要单独设置一下,否则部署在 Tomcat 里的工程取到的时间可能不是 Docker 容器的时间。设置很简单,只需在 bin 目录下的 catalina.sh 文件里加上时区即可,如下。
进入容器:
# docker  exec -it  tomcat8080   /bin/bash
进入 bin 目录:
root@054f35167ec5:/usr/local/tomcat# cd bin/
root@054f35167ec5:/usr/local/tomcat/bin# ls
catalina.sh      ......
先备份一下文件 catalina.sh 文件。

因为在容器内不能修改文件,那就把容器文件拷贝到宿主机修改,修改后再拷贝到容器覆盖原文件。
退出容器,把 Tomcat 容器 bin 目录下的 catalina.sh 拷贝到宿主机:
# docker cp tomcat8080:/usr/local/tomcat/bin/catalina.sh ./
在宿主机里编辑 catalina.sh 文件:
打开文件,找到 JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS",在双引号后面加上 “-Duser.timezone=Asia/Shanghai”(当然要与前面内容用空格隔开),修改后是这样的 JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Duser.timezone=Asia/Shanghai" 。

文件,然后重启 Tomcat 或重启容器。

5. 查看运行的 Tomcat 容器
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
9653b878cac6        tomcat              "catalina.sh run"   13 days ago         Up 13 days          0.0.0.0:8080->8080/tcp   tomcat8080

不加 -a 参数只能查看到运行中的容器,加上 -a 参数可以查看所有的容器。举例,如果上面的 Tomcat 容器是退出(Exited)状态,那么就需要加 -a 参数才能看到,如下:
# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
9653b878cac6        tomcat              "catalina.sh run"   9 days ago          Exited (143) 8 days ago                       tomcat8080

启动一个已存在的容器用 “start  容器ID” 命令,其中 “容器ID” 可以只写前面几位,Docker 能识别出是哪个容器即可。如下:
# docker start 965
965

再看容器已经启动了:
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
9653b878cac6        tomcat              "catalina.sh run"   9 days ago          Up 39 seconds       0.0.0.0:8080->8080/tcp   tomcat8080

6. 试试用浏览器打开 Tomcat 界面
这时在浏览器输入 IP:8080 就可访问默认的 Tomcat 界面了。

7. 部署Web应用(WAR工程)
先学习下基本的操作命令。

获取容器的长ID(tomcat8080 是容器名):
# docker inspect -f '{{.Id}}' tomcat8080
9653b878cac63b0c22500834c81b3f0d892d7e201c298d58d7cc9fdd5387492e

进入容器(965是容器ID的前三位数,当然也可以多写几位,只要 Docker 能唯一识别容器即可):
# docker  exec -it  965   /bin/bash
执行后直接进入容器,命令提示符由系统的转为容器的了,root@ 后面的“9653b878cac6”是容器ID(短ID),冒号后面的“/usr/local/tomcat”是容器目录,这个目录是 Docker 内的目录不是系统目录。如下:
root@9653b878cac6:/usr/local/tomcat# pwd
/usr/local/tomcat
root@9653b878cac6:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  include  lib  logs  native-jni-lib  temp  webapps  work

顺便删除 Tomcat 的 webapps 目录下的所有内容:
root@9653b878cac6:/usr/local/tomcat# cd webapps/
root@9653b878cac6:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
root@9653b878cac6:/usr/local/tomcat/webapps# rm -fr *
root@9653b878cac6:/usr/local/tomcat/webapps# ls

退出容器用 exit 命令:
root@9653b878cac6:/usr/local/tomcat/webapps# exit
exit
直接回到了系统,命令提示符由容器的转为系统的了:
[root@localhost /]# 

下面开始部署Web应用,很简单就是拷贝WAR包文件到容器中。

将要部署的WAR包拷贝到 Tomcat 容器的 webapps 目录下(命令格式是“docker cp 本地文件 容器ID:容器路径”,其中容器ID可以只写长ID的前面几位):
# docker cp testdocker.war 965:/usr/local/tomcat/webapps/
进入容器看到了拷贝的WAR包文件:
# docker  exec -it  965   /bin/bash
root@9653b878cac6:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  include  lib  logs  native-jni-lib  temp  webapps  work
root@9653b878cac6:/usr/local/tomcat# cd webapps/
root@9653b878cac6:/usr/local/tomcat/webapps# ls
testdocker  testdocker.war
看到这个WAR包已经解压了,应用跑起来了。

8. 用浏览器访问部署的Web应用
打开浏览器输入 IP:8080/testdocker 就打开了部署的Web应用界面。

总结

以上是小编为你收集整理的centos 7 中安装 docker和创建 tomcat容器并部署web应用全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

原文地址:https://blog.csdn.net/whatday

docker tomcat jvm 使用 visualVM监控

docker tomcat jvm 使用 visualVM监控

1.  建立基础镜像

FROM centos

MAINTAINER fengjian <fengjian@senyint.com>
ENV TZ "Asia/Shanghai"
ENV TERM xterm

ENV JAVA_HOME /data/jdk
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /data/tomcat
ENV CATALINA_BASE /data/tomcat
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

RUN rm /etc/yum.repos.d/* -rf
ADD Centos-7.repo /etc/yum.repos.d/
ADD epel.repo /etc/yum.repos.d/
RUN yum clean all
RUN yum -y install unzip net-tools bind-utils sysstat  kde-l10n-Chinese telnet reinstall glibc-common

RUN  localedef -c -f UTF-8 -i zh_CN zh_CN.utf8   
          
ENV LC_ALL "zh_CN.UTF-8"  

ADD localtime  /etc/
ADD jdk.tar.gz /data
ADD tomcat.tar.gz /data
ADD profile /etc
ADD 20-nproc.conf /etc/security/limits.d/
ADD limits.conf /etc/security/
RUN mkdir -p /data/webserver
RUN mkdir -p /data/logs

 

2. tomcat/conf/catalina.sh 添加初始堆参数

JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -server -Xms4096M -Xmx4096M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:-UseCounterDecay -XX:+AlwaysPreTouch  -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m  -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=18999 -Dcom.sun.management.jmxremote.rmi.port=18999 -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=192.168.200.10"

**其中 Djava.rmi.server.hostname= 192.168.200.10 为宿主机的IP地址。

 

3. 加入应用

FROM 192.168.200.10/source/tomcat8_jdk1.8_test

MAINTAINER fengjian <fengjian@senyint.com.com>

ADD webserver.tar.gz /data/webserver/

EXPOSE 80 18999

CMD ["/data/tomcat/bin/catalina.sh","run"]

 

 

4. 运行应用docker

docker run -d --name 1111 -p 50001:80  -p 18999:18999 192.168.200.10/source/gateway_test_jvm

 

5. 使用visualVM监控

 

 

 

二,

 

2. tomcat/conf/catalina.sh 添加初始堆参数

JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -server -Xms4096M -Xmx4096M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:-UseCounterDecay -XX:+AlwaysPreTouch  -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m  -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=18999 -Dcom.sun.management.jmxremote.rmi.port=18999 -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=192.168.20.174"

**其中 Djava.rmi.server.hostname= 192.168.20.174 为宿主机的IP地址。

 

部署在k8s中,使用nodePort 指定端口,端口与jmxremote.port 相同

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: gateway
  namespace: senyint
spec:
  selector:
    matchLabels:
      app: gateway
  replicas: 1
  template:
    metadata:
      labels:
        app: gateway
    spec:
      nodeName: node1   #指定部署到 node1 上 
      containers:
      - name: gateway
        image: 192.168.200.10/source/gateway_test_jvm
        resources:
          limits:
            cpu: 2
            memory: 8192Mi
          requests:
            cpu: 100m
            memory: 512Mi
        ports:
        - name: webport
          containerPort: 80
        - name: jvmport
          containerPort: 31999

---
apiVersion: v1
kind: Service
metadata:
  name: gateway
  namespace: senyint
spec:
  type: NodePort
  ports:
    - name: webport
      port: 80
      targetPort: 80
      protocol: TCP
    - name: jvmport
      port: 31999
      targetPort: 31999
      protocol: TCP
      nodePort: 31999
  selector:
    app: gateway

 

或者使用标签

kubectl label nodes  node1    jvmmonitor=test

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: gateway
  namespace: senyint
spec:
  selector:
    matchLabels:
      app: gateway
  replicas: 1
  template:
    metadata:
      labels:
        app: gateway
    spec:
      nodeSelector:
        jvmmonitor: test
      containers:
      - name: gateway
        image: 192.168.200.10/source/gateway_test_jvm
        resources:
          limits:
            cpu: 2
            memory: 8192Mi
          requests:
            cpu: 100m
            memory: 512Mi
        ports:
        - name: webport
          containerPort: 80
        - name: jvmport
          containerPort: 31999

---
apiVersion: v1
kind: Service
metadata:
  name: gateway
  namespace: senyint
spec:
  type: NodePort
  ports:
    - name: webport
      port: 80
      targetPort: 80
      protocol: TCP
    - name: jvmport
      port: 31999
      targetPort: 31999
      protocol: TCP
      nodePort: 31999
  selector:
    app: gateway

 

 

 

今天关于docker tomcat 部署war包 报错 : JVMCFRE003 bad major version;dockerfile tomcat war的讲解已经结束,谢谢您的阅读,如果想了解更多关于003-tomcat配置文件-server、tomcat-users、2019-09-20 docker 安装Tomcat ,部署war包、centos 7 中安装 docker和创建 tomcat容器并部署web应用、docker tomcat jvm 使用 visualVM监控的相关知识,请在本站搜索。

本文标签: