本文将介绍如何使用jvisualvm连接上Docker中的Tomcat,使用到的SpringBoot只是一个简单返回字符串的项目,不包含任何数据库配置。
war
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-tomcatartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>4.0.1version>
<scope>providedscope>
dependency>
@SpringBootApplication
public class SpringBootStartApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(DemoApplication.class);
}
}
mvn clean package
,然后去项目的target目录下拿到war,复制到windows下的tomcat的webapps,启动tomcat,试一下war是否可以运行。访问项目的路径要加上项目名,比如我的项目打包以后的war是demo-0.0.1-SNAPSHOT.war,那么tomcat启动后访问的主路径就是 localhost:8080/demo-0.0.1-SNAPSHOT。
手顺来自:https://blog.csdn.net/qq_34381084/article/details/81485319.
docker pull tomcat
FROM tomcat:latest
ADD demo-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/demo-0.0.1-SNAPSHOT.war
ENV CATALINA_OPTS="-Djava.rmi.server.hostname=ip -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8971 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.rmi.port=8971"
EXPOSE 8080 8971
/usr/local/tomcat/webapps是tomcat环境的路径
Djava.rmi.server.hostname后面是Docker所处的主机地址
8080是访问项目的端口
8971是jmx连接的端口,这个端口无法访问项目,但是必须设置
docker build -t 镜像名称 .
(点不能少)docker run --name 容器名称 -d -p 8080:8080 -p 8971:8971 上一步构建的镜像名称
Visual GC不能使用,也不能进行堆Dump,感觉功能整个都被阉割了,sad。