查找tomcat镜像
docker search tomcat
拉取镜像
# 通过上面查找的镜像,我们拉取下载数最多的tocmat镜像
docker pull tomcat
启动tomcat,测试是否正常访问
#--name 指定容器名称,可以当做id使用
#-p是容器端口与宿主机端口进行绑定,如第一个8080就是宿主机端口,第二个就是容器里面的端口
#-d代表容器后台启动
docker run --name tomcat -p 8080:8080 -d tomcat
通过浏览器访问,查看tomcat,可以看到,页面访问的是404,因为这个tomcat为我们清理了默认提供的所有页面,这里我们关掉tocmat容器,并重新启动一个tomcat,然后挂载一个war包到webapps下面,查看启动效果
我们挂载一个demo.war的项目
启动并访问浏览器查看效果
docker rm -f tomcat # 关闭之前的tomcat
# 启动一个新的tomcat,并挂载webapps
# -v 同 -volume,挂载一个目录或者文件到容器里面
docker run --name tomcat -v ${PWD}/tomcat/webapps:/usr/local/tomcat/webapps -p 8080:8080 -d tomcat
对tomcat进行参数优化
执行 docker ps可以看到,tomcat容器执行的是catalina.sh run启动tomcat的,所以我们进入容器,去查看这个脚本做了什么
docker exec -ti tomcat bash
cat bin/catalina.sh
找到JAVA_OPTS这一行注释说明
这里说的是,设置java运行时的选项,继承他而不包含CCATALINA_OPS的选项,我们通过这个参数来对jvm进行优化,
关闭之前的容器,在容器上面添加JVM_OPTS的参数设置
docker rm -f tomcat
docker run --name tomcat -v ${PWD}/tomcat/webapps:/usr/local/tomcat/webapps -v ${PWD}/tomcat/error:/opt/tomcat/error -e JAVA_OPTS="-Xmx128m -Xms128m -Xmn32m -Xss512k -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat/error -Duser.timezone=Asia/Shanghai" -p 8080:8080 -d tomcat
# -Xmx128 这里设置jvm能使用的最大内存为128m
# -Xms128 设置jvm初始内存为128m,和-Xmx设置一样,防止jvm内存多次扩容带来的消耗
# -Xmn32m 设置年轻代内存大小,根据实际情况设置即可
# -Xss512k 设置线程堆栈大小
# -XX:+HeapDumpOnOutOfMemoryError 开启jvm内存泄漏的堆栈导出
# -XX:HeapDumpPath=/opt/tomcat/error 设置堆栈导出的目录
查看容器启动日志,查找设置的参数是否生效
docker logs -f tomcat
可以看到,设置的参数,在tomcat日志中已经打印出来
进入容器,查看tomcat启动命令,是否携带设置的参数
# -ti 已交互的方式启动容器 bash,容器支持的shell解释器
docker exec -ti tomcat bash
ps -ef | grep tomcat
能够看到,在java启动的时候,已经把这些参数设置进去了