You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
INFO: Deploying web application directory /usr/anyesu/tomcat/webapps/ROOT
Jun 10, 2017 3:03:28 PM org.apache.catalina.startup.TldConfig execute
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Jun 10, 2017 3:14:01 PM org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [624,301] milliseconds.
Jun 10, 2017 3:14:05 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory /usr/fuyou/tomcat/webapps/ROOT has finished in 644,588 ms
Jun 10, 2017 3:14:05 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Jun 10, 2017 3:14:05 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Jun 10, 2017 3:14:05 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 644776 ms
关键的一句就是: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [624,301] milliseconds
这个步骤竟然用了10分钟!查了一下发现是 docker 容器下 随机数与熵池策略 有问题。
解决方法如下,个人更推荐第二种:
前言
在 Docker 常用指令详解 一文中介绍过使用
docker run
命令配合各种复杂的选项完成对 容器 的构建和运行,但是这么长串的命令真的不是很好记也容易敲错。Docker Compose 是一个用来定义和运行复杂应用的 Docker 工具,以 yaml 格式的数据来保存 容器配置,使用更简单的命令完成对 容器 的管理。此外 docker-compose.yml 还起到一个说明文档的作用, 一切配置在里面显得一目了然,就不用另外单独去写部署文档了。安装与卸载
1. 安装 Docker Compose ( 官方文档 )
2. 卸载 Docker Compose
使用方法 ( 参考 )
命令选项列表
子命令列表
start
stop
restart
docker-compose.yml 语法 ( 参考、进阶用法 )
一般只写第二层 [services] 的内容即可, 如果要指定语法版本则要从最外层开始写。
示例
以我去年写的一篇 websocket 文章 中的项目作为示例
在当前目录下创建 docker-compose.yml
再创建 Dockerfile 文件, 用于构建镜像
接着就可以构建并运行了
之后就可以通过 ip:8080 或 ip:3000 访问这两个项目了 ( 注意防火墙开放这两个端口哦 )
说明:
将日志文件映射到宿主机目录上方便查看,如果源码不想打包到镜像中也可以做映射。还有一个小技巧,用空目录映射镜像已有目录达到删除的效果,如
tomcat/webapps
下的自带应用是没用的,可以用这个方法清除。JVM 参数
可以配置在环境变量JAVA_OPTS
中。使用 nodejs 的全局安装 (-g
) 时别忘了设置NODE_PATH
command
只能运行一条命令,如果要运行多条就使用sh -c "..."
, 实际命令用&&
隔开做参数传入websocket 的 demo源码 有不少同学反映项目配置不起来,研究下上面的
Dockerfile
和docker-compose.yml
应该就能对项目的结构和依赖有更清晰的了解了。在
demo-websocket-tomcat
项目的配置中, 出于 安全 考虑,使用普通用户登录。宿主机的/usr/anyesu/tomcat/logs
目录要设置777
权限,否则tomcat
无法写日志。容器的配置信息,
hosts
,dns
配置文件等可以在/var/lib/docker/containers/[容器id]/
下查看。遇到的坑:
之前一个原本启动只要 10 秒的小项目在容器中有时候重启要好几分钟甚至可能会一直启不来,在日志中找到下面这段内容:
关键的一句就是: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [624,301] milliseconds
这个步骤竟然用了10分钟!查了一下发现是 docker 容器下 随机数与熵池策略 有问题。
解决方法如下,个人更推荐第二种:
securerandom.source=file:/dev/random 替换为 securerandom.source=file:/dev/urandom
JAVA_OPTS=-Djava.security.egd=file:/dev/./urandom
系列文章
Docker 学习总结
Docker 常用指令详解
使用 Dockerfile 构建镜像
Docker Daemon 连接方式详解
Docker 下的网络模式
转载请注明出处:http://www.jianshu.com/p/ee8e7d2eb645
The text was updated successfully, but these errors were encountered: