如何对tomcat应用程序进行Docker化

时间:2017-02-17 16:23:39

标签: java tomcat docker dockerfile

我正在尝试将一些Tomcat应用程序停靠,但我之前从未接触过Java应用程序,因此缺乏理解使得我很难理解应该做什么。

到目前为止,我有这个,但它不起作用,如果它也是正确的路径我也不知道

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

我正在进行循环,因为我不明白,谷歌搜索对我没那么帮助(我不知道该怎么问)。

我应该在构建中使用jar命令吗?如果没有,我想我必须在本地构建它,并确保.war是否正确?!

如何使用Tomcat应用程序构建Java?以及如何与Docker集成?

对于过于通用而感到抱歉,但我对Java

一无所知

3 个答案:

答案 0 :(得分:4)

您可以尝试这样做"手动"在尝试自动化之前,它应该有助于理解这个过程。您不需要扩展tomcat官方映像以便能够在dockerized tomcat上部署战争,如果您不需要自定义权限和用户,您可以直接使用该映像(在生产中,您需要)。

如果您需要Tomcat 6.x,因为您的webapp实现了servlet API< 3,做到这一点:

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

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

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

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

答案 1 :(得分:3)

看看你的代码,这就是我可以发现的:

  • 您有一些存储在当前目录(.
  • 中的java文件
  • 当您致电COPY时,请将所有这些内容复制到/app_name
  • 您在文件
  • 上创建.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

通过这种方式,您可以将所有构建,配置和其他内容放在一个可以在本地测试的脚本中(如果有帮助的话再次)

编辑:添加有关本地构建和复制到dockerfile的提及

您可以在计算机上构建.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,然后将其添加到路径$CATALINA_BASE/webapps/app_name.war的容器的文件系统中。所以你这样做:

  1. 使用java
  2. 在您的计算机上构建.war
  3. .war放入Dockerfile
  4. 目录中
  5. COPY app_name.war进入容器的文件系统

答案 2 :(得分:2)

我不使用docker,我使用类似的AWS产品codedeploy来配置实例,所以我告诉你我在配置脚本中为Tomcat设置做了什么。应该很容易移植到docker作为bash命令。

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

2)安装Tomcat

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

然后打开它

服务启动tomcat8

3)部署战争 要运行war,请将其放在Tomcat安装的webapps文件夹中。当我这样做时,我通常喜欢关闭tomcat,但是你可以在运行时关闭它。几秒钟后,WAR(实际上只是一个zip文件)将被展开/解压缩以创建一个目录。

4)访问应用程序/网站 如果您将战争重命名为ROOT.war,那么您可以在http://localhost:8080访问应用程序,如果您的配置是在8080上进行侦听。如果您的战争名为pets.war,那么您的webapp URL将是{{3} }。您可以在其conf文件夹中的server.xml文件中配置Tomcat要侦听的端口。

最重要 一旦您知道要查找的内容,Tomcat文档就非常好。主要配置文件是web.xml,context.xml和server.xml。中央tomcat指南解释了您只需找到与您的Tomcat版本对应的文档所需的每个组件http://localhost:8080/pets