我正在尝试将一些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
一无所知答案 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)
看看你的代码,这就是我可以发现的:
.
)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
的容器的文件系统中。所以你这样做:
.war
.war
放入Dockerfile
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。