Dockerfile同時配置tomcat和jar包運行


最近想一次性將前端和后端一起打包發布到docker鏡像中,這樣在新機器上只需要直接啟動容器就行了。

其中前端是放在tomcat的webapps文件夾下,后端是直接執行java -jar包。

直接用tomcat:8-jdk8-openjdk鏡像啟動的容器tomcat是已經運行的,只需要把所需的web項目放到webapps文件夾下即可打開。將jar 包復制進入該容器,然后手動啟動jar包也沒問題,說明容器內已將java綁定環境變量。

所以一開始想的是直接將前后端文件復制進鏡像對應位置,然后運行容器時執行java -jar命令即可。然而事與願違,這樣只會執行java命令,而鏡像原本自啟動tomcat的命令不會執行。

所以第二個思路是執行cmd命令時同時執行啟動tomcat和java命令,然而目前的設定貌似單次只能執行一個命令,我使用&&符號拼接為一個命令並沒有執行成功。

所以有了第三個思路,把cmd執行命令寫為執行文件.sh,然而又報錯:standard_init_linux.go:228: exec user process caused: exec format error,根據https://blog.51cto.com/u_15127504/4123120  在首行添加#!/bin/bash解決。

最終Dockerfile如下:

from tomcat:8-jdk8-openjdk

# 將要執行的jar包放在了新建的文件夾下 run
mkdir -p /usr/local/tomcat/jar.file
# 把需要修改和新增的文件復制到對應文件夾 copy Catalina
/localhost/* /usr/local/tomcat/conf/Catalina/localhost/ copy context.xml /usr/local/tomcat/conf/ copy tomcat-users.xml /usr/local/tomcat/conf/ copy test-ui /usr/local/tomcat/webapps/test-ui copy test.jar /usr/local/tomcat/jar.file/ copy run.sh /usr/local/tomcat/run.sh expose 8080 9123 cmd ["/usr/local/tomcat/run.sh"]

要執行的run.sh文件如下:

#!/bin/bash

nohup java -jar /usr/local/tomcat/jar.file/test.jar --server.port=9123 > /data/logs/test.log 2>&1 &

/usr/local/tomcat/bin/catalina.sh run

其中啟動catalina.sh要放在最后執行,因為它相當於啟動新窗口,放在前面會導致后面的命令無法執行。

最后運行打包后的鏡像即可:

docker run -dit --name tomcat_jdk_test -p 8080:8080 -p 9123:9123 -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro  -v /data:/data tomcat:8-jdk8-openjdk

如此即可完成。

 

小細節:發現沒有,上面我們不需要復制tomcat容器中webapps.dist文件夾的內容到webapps文件夾,項目也可以正常運行~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM