当前位置:首页 > 开发语言 > 正文

dockerfile tomcat?tomcat webapps

dockerfile tomcat?tomcat webapps

大家好,今天小编来为大家解答dockerfile tomcat这个问题,tomcat webapps很多人还不知道,现在让我们一起来看看吧!如何实现docker的数据持...

大家好,今天小编来为大家解答dockerfile tomcat这个问题,tomcat webapps很多人还不知道,现在让我们一起来看看吧!

如何实现docker的数据持久化

讲容器内的文件或目录monut到宿主机的硬盘上比如dockerrun-d-v/var/log:/usr/local/tomcat/logstomcat:9表示tomcat容器中的/usr/local/tomcat/logs会挂载到宿主机的/var/log这样即使容器删除,宿主机的/var/log目录仍会保存下来

docker中部署tomcat需要交jdk吗

tomcat运行需要JDKA,所以需要先装JDK

虚拟机centos上的docker启动tomcat无法访问

1.看看自己的虚拟机的网络模式

2.宿主机ping下虚拟机看能否ping通。如果用宿主机访问虚拟机,宿主机里面虚拟机的网关段来ping虚拟机。

3.另外确定自己的防火墙没有打开,如果打开了防火墙没开授信访问不了也是应该的。

如何设置Docker容器中Java应用的内存限制

如果使用官方的Java镜像,或者基于Java镜像构建的Docker镜像,都可以通过传递JAVA_OPTS环境变量来轻松地设置JVM的内存参数。比如,对于官方Tomcat镜像,我们可以执行下面命令来启动一个最大内存为512M的tomcat实例

dockerrun--rm-eJAVA_OPTS='-Xmx512m'tomcat:8

在日志中,我们可以清楚地发现设置已经生效“Commandlineargument:-Xmx512m”

02-Apr-201612:46:26.970INFO[main]org.apache.catalina.startup.VersionLoggerListener.logServerversion:ApacheTomcat/8.0.32

02-Apr-201612:46:26.974INFO[main]org.apache.catalina.startup.VersionLoggerListener.logServerbuilt:Feb2201619:34:53UTC

02-Apr-201612:46:26.975INFO[main]org.apache.catalina.startup.VersionLoggerListener.logServernumber:8.0.32.0

02-Apr-201612:46:26.975INFO[main]org.apache.catalina.startup.VersionLoggerListener.logOSName:Linux

02-Apr-201612:46:26.975INFO[main]org.apache.catalina.startup.VersionLoggerListener.logOSVersion:4.1.19-boot2docker

02-Apr-201612:46:26.975INFO[main]org.apache.catalina.startup.VersionLoggerListener.logArchitecture:amd64

02-Apr-201612:46:26.975INFO[main]org.apache.catalina.startup.VersionLoggerListener.logJavaHome:/usr/lib/jvm/java-7-openjdk-amd64/jre

02-Apr-201612:46:26.976INFO[main]org.apache.catalina.startup.VersionLoggerListener.logJVMVersion:1.7.0_95-b00

02-Apr-201612:46:26.976INFO[main]org.apache.catalina.startup.VersionLoggerListener.logJVMVendor:OracleCorporation

02-Apr-201612:46:26.977INFO[main]org.apache.catalina.startup.VersionLoggerListener.logCATALINA_BASE:/usr/local/tomcat

02-Apr-201612:46:26.977INFO[main]org.apache.catalina.startup.VersionLoggerListener.logCATALINA_HOME:/usr/local/tomcat

02-Apr-201612:46:26.978INFO[main]org.apache.catalina.startup.VersionLoggerListener.logCommandlineargument:-Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties

02-Apr-201612:46:26.978INFO[main]org.apache.catalina.startup.VersionLoggerListener.logCommandlineargument:-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

02-Apr-201612:46:26.978INFO[main]org.apache.catalina.startup.VersionLoggerListener.logCommandlineargument:-Xmx512m

...

然而在Docker集群上部署运行Java容器应用的时候,仅仅对JVM的heap参数设置是不够的,我们还需要对Docker容器的内存资源进行限制:

1.限制容器使用的内存的最大量,防止对系统或其他应用造成伤害

2.能够将Docker容器调度到拥有足够空余的内存的节点,从而保证应用的所需运行资源

关于容器的资源分配约束,Docker提供了相应的启动参数

对内存而言,最基本的就是通过-m参数来约束容器使用内存的大小

-m,--memory=""

Memorylimit(format:<number>[<unit>]).Numberisapositiveinteger.Unitcanbeoneofb,k,m,org.Minimumis4M.

那么问题就来了,为了正确设置Docker容器内存的大小,难道我们需要同时传递容器的内存限制和JAVA_OPTS环境变量吗?如下所示:

dockerrun--rm-m512m-eJAVA_OPTS='-Xmx512m'tomcat:8

这个方法有两个问题

1.需要管理员保证容器内存和JVM内存设置匹配,否则可能引发错误

2.当对容器内存限制调整时,环境变量也需要重新设定,这就需要重建一个新的容器

是否有一个方法,可以让容器内部的JVM自动适配容器的内存限制?这样可以采用更加统一的方法来进行资源管理,简化配置工作。

大家知道Docker是通过CGroup来实现资源约束的,自从1.7版本之后,Docker把容器的localcgroups以只读方式挂载到容器内部的文件系统上,这样我们就可以在容器内部,通过cgroups信息来获取系统对当前容器的资源限制了。

我创建了一个示例镜像registry.aliyuncs.com/denverdino/tomcat:8-autoheap

,其源代码可以从Github获得。它基于Docker官方Tomcat镜像创建,它的启动脚本会检查CGroup中内存限置,并计算JVM最大Heapsize来传递给Tomcat。其代码如下

#!/bin/bash

limit_in_bytes=$(cat/sys/fs/cgroup/memory/memory.limit_in_bytes)

#Ifnotdefaultlimit_in_bytesincgroup

if["$limit_in_bytes"-ne"9223372036854771712"]

then

limit_in_megabytes=$(expr$limit_in_bytes\/1048576)

heap_size=$(expr$limit_in_megabytes-$RESERVED_MEGABYTES)

exportJAVA_OPTS="-Xmx${heap_size}m$JAVA_OPTS"

echoJAVA_OPTS=$JAVA_OPTS

fi

execcatalina.shrun

说明:

为了监控,故障排查等场景,我们预留了部分内存(缺省64M),其余容器内存我们都分配给JVM的堆。

这里没有对边界情况做进一步处理。在生产系统中需要根据情况做相应的设定,比如最大的堆大小等等。

现在我们启动一个tomcat运行在512兆的容器中

dockerrun-d--nametest-m512mregistry.aliyuncs.com/denverdino/tomcat:8-autoheap

通过下列命令,从日志中我们可以检测到相应的JVM参数已经被设置成448MB(512-64)

dockerlogstest

...

02-Apr-201614:18:09.870INFO[main]org.apache.catalina.startup.VersionLoggerListener.logCommandlineargument:-Xmx448m

...

我们也可以方便的调整Java应用的内存.

Docker1.10提供了对容器资源限制的动态修改能力。但是由于JVM无法感知容器资源修改,我们依然需要重启tomcat来变更JVM的内存设置,例如,我们可以通过下面命令把容器内存限制调整到1GB

dockerupdate-m1024mtest

dockerrestarttest

再次检查日志,相应的JVMHeapSize最大值已被设置为960MB

dockerlogstest

...

02-Apr-201614:21:07.644INFO[main]org.apache.catalina.startup.VersionLoggerListener.logCommandlineargument:-Xmx960m

springBoot项目如何部署

SpringBoot项目可以生成两种部署包:一种是jar包,一种是War包

jar包(官方推荐)

jar包方式启动,也就是使用springboot内置的tomcat运行。服务器上面只要你配置了jdk1.8及以上,就ok。不需要外置tomcat

1.打成jar包

2.将jar包放到任意目录,执行下面的命令

$nohupjava-jartest.jar>temp.txt&

//这种方法会把日志文件输入到你指定的文件中,没有则会自动创建。进程会在后台运行。

war包

传统的部署方式:将项目打成war包,放入tomcat的webapps目录下面,启动tomcat,即可访问。

对于打包,到项目根路径:执行mvncleanpackage就OK

docker容器与虚拟机有什么区别

谢邀~

我们单位最近在推docker,已经在开发测试环境使用(稍显落后),下面我就谈谈自己的Docker的理解,以及Docker和虚拟机的区别。

虚拟机

先说说什么是虚拟机:在一台物理机器上,利用虚拟化技术,虚拟出来多个操作系统,每个操作系统之间是隔离的。

说起来有些绕,那么我们看看虚拟机的架构图,就容易理解了。例如我们要在一台物理机器运行三个Java项目,彼此之间隔离。

从下往上看,解释起来其实很简单:

最下面的一层就是物理机,可以是服务器,设置是一台个人电脑;

电脑上需要安装操作系统,比如我们安装了win10的操作系统;

再往上就是虚拟机软件了,比如我们常用的VirtualBox、VMWare,它们的作用是模拟计算机硬件;

继续向上,就是虚拟机模拟出来的操作系统了;

在虚拟的操作系统中,安装所需的软件、组件等。比如我们需要在虚拟操作系统中安装JDK、Tomcat等;

最后就是具体的应用了,例如部署到Tomcat中。

Docker

再说说什么是Docker,找了一句官方的解释:Docker是开源的应用容器引擎。是不是又一头雾水?我们还是先看看Docker的架构图。

依然从下往上看:

最下面两层,概念同上。

往上,可以看做Docker容器的管理器。

依赖和应用都被打包成了Docker镜像。例如,JDK、Tomcat、应用都被打包在了一起,运行在Docker容器里,容器和容器间是隔离的。

这里提示:Linux支持Docker,Windows和MacOS的话,不直接支持(win10专业版好像可以直接支持,不过我都是安装Linux的虚拟机,在上面跑Docker)。

Docker和虚拟机的区别

从两者的架构图上看,虚拟机是在硬件级别进行虚拟化,模拟硬件搭建操作系统;而Docker是在操作系统的层面虚拟化,复用操作系统,运行Docker容器。

Docker的速度很快,秒级,而虚拟机的速度通常要按分钟计算。

Docker所用的资源更少,性能更高。同样一个物理机器,Docker运行的镜像数量远多于虚拟机的数量。

虚拟机实现了操作系统之间的隔离,Docker算是进程之间的隔离,虚拟机隔离级别更高、安全性方面也更强。

虚拟机和Docker各有优势,不存在谁替代掉谁的问题,很多企业都采用物理机上做虚拟机,虚拟机中跑Docker的方式。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。

关于dockerfile tomcat的内容到此结束,希望对大家有所帮助。

最新文章