docker部署tomcat,主要点在于挂载、环境变量、日志控制、jvm监控设置等。
docker-compose是docker服务编排工具,可以将多个服务编排在同一个yml文件中,且可以设置依赖关系、网关等,一键启动所有服务。
此处贴出tomcat的yml配置:
version: '2'
services:
{appName}:
image: tomcat:latest
container_name: {appName}
restart: always
mem_limit: 1024m
memswap_limit: 1024m
ports:
- "{jvmPort}:{jvmPort}"
#- "{8081}:8080"
expose:
- "8080"
environment:
- JAVA_OPTS=-Xms1000m -Xmx1020m -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
- CATALINA_OPTS=-Djava.rmi.server.hostname={serverIp} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port={jvmPort} -Dcom.sun.management.jmxremote.rmi.port={jvmPort} -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
logging:
options:
max-size: "1024k"
max-file: "5"
volumes:
- /home/docker/logs/{appName}/tomcat-logs/:/docker/apache-tomcat/logs/
- /home/docker/webapps/{appName}/:/docker/apache-tomcat/webapps/
分别解释如下:
1、version:'2'
标明docker-compose的yml版本,其中2为普通docker-compose的yml版本。3为集群版本(个人区分办法,具体请大家查看资料自行理解)。
2、services
即多个service服务的节点。每个service有自己的服务名。
3、image
当前服务使用的镜像,此镜像必须存在于当前宿主机上,或者宿主机可连的镜像仓库,或者docker的官方镜像仓库中。
4、container_name
version=2中,容器名称,在version=3的yml中不适用。
5、restart:always
当docker重启,此服务也跟着重启。
6、mem_limit:1024m
容器内存限制。
7、memswap_limit:1024m
容器空间限制。
8、ports
端口映射,容器端口与宿主机端口之间的映射。如果通过ports映射了端口,则在外部可通过端口访问当前容器内的应用。
如,容器中通过ports给tomcat容器配置端口映射为"8081:8080",nginx可通过端口配置映射:
upstream appName {
ip_hash;
server {serverIp}:8081 max_fails=2 fail_timeout=30s;
}
9、expose
与ports不同,不进行端口映射。但其他服务能通过服务名+expose端口访问当前服务。如nginx(与当前服务同一台宿主机),可通过serviceName:8080做映射或动态均衡。如:
upstream appName {
ip_hash;
server appName:8080 max_fails=2 fail_timeout=30s;
}
10、environment
容器环境变量。
11、JAVA_OPTS=-Xms1000m -Xmx1020m -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
-Xms1000m -Xmx1020m是容器中的jvm内存限制,默认为操作系统内存的1/4。
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder是jvm监控的飞行器模块的开启。
12、CATALINA_OPTS
此处配置的是jvm监听的服务器信息、监听端口。即可通过该配置,能在远程监控该容器的jvm使用情况等。
监听的配置内容如下:
-Djava.rmi.server.hostname={serverIp}
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port={jvmPort}
-Dcom.sun.management.jmxremote.rmi.port={jvmPort}
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
实际应用中,汇聚成一行,并作为CATALINA_OPTS环境变量的值。
13、logging
容器生成的内部日志的大小限制,该日志并非是tomcat等容器的业务日志,是容器的运行日志+业务日志的独立文件(containerId-json.log)。如果不限制大小,将会导致日志过大,导致服务器崩溃。(曾经见过10G的该日志文件)
14、max-size、max-file
max-size是单独的一个文件的大小,max-file是最多可以存在几个文件。如:max-size:1m,max-file:5,即该容器的json.log文件将自动分为最多5个文件,且每个文件最大只能是1m。
15、volumns
容器内部文件或目录,与宿主机的文件或目录的挂载关系。
volumns每行的规则是:
宿主机目录/文件:容器内的目录/文件
具体挂载哪些目录和文件,以及容器内的目录和文件的路径,需要看使用的镜像为定。
----------------------------------------------------------------------------
#jvm监听使用
如果容器开启了jvm监听(11/12点),可通过jdk的工具做远程监听。
本地jdk监听远程服务器的某一tomcat容器:
1、监听工具:E:\xxx\Java\jdk1.8.0_201\bin\jmc.exe
2、容器开放的监听端口:9999
3、监听器配置:
(1)双击jmc.exe后,通过“文件”-“连接”-“创建新的连接”,配置连接信息:
(2)MBean监听画面:
(3)飞行记录器配置
配置记录文件路径后,下一步-->下一步(如有特殊的配置,请自行研究)-->完成