docker-compose部署tomcat时的yml配置

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)飞行记录器配置

配置记录文件路径后,下一步-->下一步(如有特殊的配置,请自行研究)-->完成

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值