繁体   English   中英

如何Dockerize一个tomcat应用程序

[英]How to Dockerize a tomcat app

我试图将一些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一无所知

在尝试自动化之前,您可以尝试“手动”执行此操作,这应该有助于理解该过程。 您不需要扩展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/

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

  • 你有一些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在您的机器上构建.war
  2. .war放在Dockerfile目录中
  3. COPY app_name.war到容器的文件系统中

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

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

一旦您知道要查找的内容, 最重要的 Tomcat文档非常好。 主要配置文件是web.xml,context.xml和server.xml。 中央tomcat指南解释每个组件https://tomcat.apache.org/tomcat-7.0-doc/setup.html您只需要找到与您的Tomcat版本对应的文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM