簡體   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