如何Dockerize一个Tomcat的应用程序

我试图dockerize一些Tomcat的应用程序,但我从来没有触及Java应用程序之前,所以缺乏了解,这使得真的很难理解我该怎么做。

到目前为止,我有这个,但它不工作,如果这是正确的path,我也不会

FROM tomcat:6 ENV APP_ROOT /app_name RUN apt-get update && apt-get install -y default-jdk COPY . $APP_ROOT/ WORKDIR $APP_ROOT RUN jar -cvf app_name.war * # this fail for some reason, when I do `ls` the file is there but if fail to copy it COPY app_name.war $CATALINA_BASE/webapps/app_name.war 

我只是在循环,因为我不明白,谷歌search不帮我(我不知道该怎么问)。

我应该在构build中使用jar命令吗? 如果没有,我想我必须在本地构build它,只要确保.war在那里是正确的?!

如何用Tomcat应用程序构buildJava? 以及如何与Docker集成?

对不起,因为太generics,但我不明白任何关于Java

看看你的代码,这是我可以闪耀的:

  • 你有一些java文件存储在当前目录( .
  • 当您调用COPY ,将所有这些内容复制到/app_name
  • 你在文件上创build一个.war文件

有一些事情要注意,首先是app_name.war不在主机磁盘上,它目前在docker文件系统中。 这意味着你不能COPY .war

你真的是这样的: RUN cp app_name.war $CATALINA_BASE/webapps/app_name.war

这看起来像下面这样: Dockerfile

 FROM tomcat:6 ENV APP_ROOT /app_name RUN apt-get update && apt-get install -y default-jdk COPY . $APP_ROOT/ WORKDIR $APP_ROOT RUN jar -cvf app_name.war * RUN cp app_name.war $CATALINA_BASE/webapps/app_name.war 

在此处添加docker COPY参考,详细说明命令。 制作一个名为provision.sh的脚本也可能对您有所帮助,然后执行如下操作:

 COPY provision.sh /tmp/provision.sh RUN sh /tmp/provision.sh 

这样,你可以把你所有的构build,configuration和其他一个脚本,你可以在本地testing(如果有帮助的话)

编辑:添加关于本地build设和复制到dockerfile

你可以在你的机器上build立.war ,使用COPY放在机器上。 Dockerfile

 FROM tomcat:6 ENV APP_ROOT /app_name RUN apt-get update && apt-get install -y default-jdk COPY app_name.war $CATALINA_BASE/webapps/app_name.war WORKDIR $APP_ROOT 

上面复制文件app_name.war然后将其添加到容器的文件系统,path$CATALINA_BASE/webapps/app_name.war 。 所以,你这样做:

  1. 使用java在您的机器上构build.war
  2. .war放在Dockerfile目录中
  3. COPY app_name.war到容器的文件系统中

在尝试自动化之前,您可以尝试“手动”,这有助于理解过程。 你不需要扩展一个tomcat的官方镜像就可以在一个dockerized tomcat上部署一个war,如果你不需要自定义权限和用户(在生产中,你需要),你可以直接使用这个镜像。

如果您需要Tomcat 6.x,因为您的Web应用程序实现了servlet API <3,请执行以下操作:

 sudo docker run --name tomcat --detach --port 8080:8080 tomcat:6 

现在,您的Tomcat正在后台运行(–detach),正在等待部署。 您已经从容器中导出了端口8080,并将其映射到您的主机的端口8080,因此您的主机上的http:// localhost:8080 /上可以使用该应用程序。

从现在起,如果您将/ .rr / local / tomcat / webapps中的.war复制到容器中,应用程序将被部署:

 sudo docker cp app_name.war tomcat:/usr/local/tomcat/webapps/ 

我没有使用docker,我使用一个名为codedeploy的类似的AWS产品来configuration实例,所以我告诉你我的configuration脚本中的Tomcat设置。 应该很容易移植到docker作为bash命令。

1)构buildWAR现在大多数Java应用程序都是使用Maven构build的,但是Gradle正在迎头赶上。 Maven和WAR插件用于将Java代码转换为可以在Tomcat上部署的WAR文件。 但是看起来你已经拥有由其他人build立的WAR了? 无论哪种方式,你不直接运行战争,你把它放在Tomcat,除非你已经捆绑了Tomcat到应用程序,在这种情况下,它将是一个JAR,但不要谈论这个….简单的解决scheme是build立使用像Maven或Gradle这样的构build工具从Java代码中进行战争。 通过构build,我的意思是把它从源代码转换为二进制。

2)安装Tomcat

yum安装tomcat6,7,8等等(无论你需要什么版本)

然后打开它

服务启动tomcat8

3)部署战争运行战争把它放在Tomcat安装的webapps文件夹中。 当我这样做的时候,我通常喜欢closurestomcat,但是在运行的时候可以这样做。 几秒钟后,WAR将被分解/解压缩,创build一个目录。

4)访问应用程序/站点如果你将war重命名为ROOT.war,那么你可以通过http:// localhost:8080访问应用程序,如果你的configuration是在8080上监听的话。如果你的war被命名为pets.war,你的webapp的URL将是http:// localhost:8080 / pets 。 您可以configurationTomcat要在其conf文件夹的server.xml文件中侦听的端口。

一旦你知道要找什么, 最重要的 Tomcat文档是非常好的。 主要的configuration文件是web.xml,context.xml和server.xml。 中央tomcat指南解释每个组件https://tomcat.apache.org/tomcat-7.0-doc/setup.html你只需要find对应于你的Tomcat版本的文档&#x3002;