Docker安装+HelloWorld+运行Tomcat (2)

(滚犊子,没运行起来,踩坑了!,一直卡在INFO: Deploying web application directory这句话上了。我还一直想,为啥我访问不到呢,才发现没运行起来)

3.1解决docker运行Tomcat卡住的问题

原因:

docker+tomcat 启动时非常慢,一般正常启动几十秒的,发现docker+tomcat启动竟需要几分钟,不可思议

根本原因是 SecureRandom 这个 jre 的工具类的问题。那为什么 SecureRandom generateSeed 这么慢,甚至挂在 Linux 操作系统呢?

Tomcat 7/8 都使用 org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom 类产生安全随机类 SecureRandom 的实例作为会话 ID。

SecureRandom generateSeed 使用 /dev/random 生成种子。但是 /dev/random 是一个阻塞数字生成器,如果它没有足够的随机数据提供,它就一直等,这迫使 JVM 等待

首先,我们先以后台的方式运行Tomcat镜像:

docker run -tid tomcat

以bash的方式进入到容器中:

docker exec -it 4a471223bfc4(为你正在运行容器的id) /bin/bash

为容器安装vim:

apt-get update apt-get install vim

修改对应的java.security文件

cd /docker-java-home/jre/lib/security vim java.security

找到 securerandom.source=file:/dev/random,修改为securerandom.source=file:/dev/./urandom

在Tomcat镜像下创建一个属于我们自己的Tomcat镜像(这个镜像安装了vim,修改了配置文件)

docker commit -m "change java.security" -a "3y" 4a471223bfc4(为当前容器的id) mytomcat

于是我们就生成了mytomcat镜像,就可以使用mytomcat:

docker run -it -p:9999:8080 mytomcat

效果图:

使用Docker容器成功启动Tomcat

参考资料:

docker 启动tomcat慢的解决方法

https://my.oschina.net/lwenhao/blog/1830538

JRE /dev/random阻塞

https://www.cnblogs.com/lemon-flm/p/7396627.html

除了Tomcat,大家还可以去拉个mysql、redis、centos等等镜像来玩玩~~

四、命令说明

Docker的命令无非就是对镜像、对容器进行增删改查。我是不太喜欢拉出每个命令来写文章的,所以这些命令还是大家自行学习吧~~

之前收集资料的时候,我也找到了一张关于Docker的思维导图,对着来看看,感觉就没问题了:

Docker的思维导图

关注我的公众号,回复 脑图 即可获取原图(.xmind和.png格式)

最后

留下几个问题:

我们知道Tomcat运行起来需要Java的支持,那么我们在Docker拉取下来的Tomcat镜像是不是也有Java环境呢?

容器退出了(好比Linux进程退出了),容器的数据就没了,我们想要保留容器内的数据,怎么办?

从上面我们可以看出,通过commit可以在原有的容器基础上,创建出属于我们自己的镜像,还有其他方式创建新的镜像吗?

乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,不妨来关注一下!

帅的人都关注了

觉得我的文章写得不错,不妨点一下

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfjfg.html