亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Docker 與 Maven 和 Tomcat

Docker 與 Maven 和 Tomcat

繁華開滿天機 2023-04-19 17:02:31
我正在嘗試使用 Java、Maven 和 Tomcat 創建一個記事本容器。到目前為止,我能夠使用 Maven 創建一個容器并編譯我的 java 代碼并創建最終的 WAR 文件。但我想將此 WAR 文件復制到另一個 Tomcat 容器的特定文件夾(tomcat 的 webapp 文件夾)。方法一,DockerfileFROM maven:3.6.1-jdk-8 as maven_builderENV HOME=/appWORKDIR $HOMEADD pom.xml $HOMERUN ["/usr/local/bin/mvn-entrypoint.sh", "mvn", "verify", "clean", "--fail-never"]ADD . $HOMERUN ["mvn","clean","install","-T","2C","-DskipTests=true"]FROM tomcat:8.5.43-jdk8COPY --from=maven_builder $HOME/wc_admin/target/wc-admin.war /usr/local/tomcat/webapps我試圖簡單地復制它,但在復制之前刪除了中間容器。方法 2,我正在嘗試為 docker-compose 編寫一個 YAML 并使用共享卷概念。version: '3'services:    maven-build:        build: .        volumes:            - 'myshare:/shared'    tomcat-build:        image: 'tomcat:8.5.43-jdk8'        ports:            - '8080:8080'        volumes:            - 'myshare:/shared'volumes:  myshare:    driver: local '我不知道如何將特定文件從一個容器(即 maven_build)復制到另一個容器(即 tomcat 的 webapp 文件夾)。
查看完整描述

3 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

您的第一個(多階段構建)方法是更好的做法。


在多階段構建中,每次你有一個新的FROM命令來啟動一個新的圖像時,執行環境都會重置。特別是,當第一階段設置HOME環境變量時,該變量會在第二階段重置,因此最終COPY命令是復制出/wc_admin/...而不是構建應用程序的目錄。


通常將 Docker 文件系統布局視為固定的,并且不設置HOME在其他上下文中有意義但在 Docker 中實際上沒有意義的變量。我只是在整個過程中進行硬編碼/app:


FROM maven:3.6.1-jdk-8 as maven_builder

WORKDIR /app

ADD pom.xml .

...

FROM tomcat:8.5.43-jdk8

COPY --from=maven_builder /app/wc_admin/target/wc-admin.war /usr/local/tomcat/webapps

卷方法有兩個大問題。人們試圖利用 Docker 用圖像中的內容填充命名卷,但這只在您第一次運行它時有效。如果您重建映像,Docker 會拒絕接觸該卷(它有必須保留的重要用戶數據,這就是卷的用途),因此您的卷將保留您的舊文件.war。如果你曾經在 Kubernetes 中運行你的應用程序,它不會自動從圖像填充卷,你需要做更多的工作才能使卷共享設置工作。


查看完整回答
反對 回復 2023-04-19
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

在你的方法一中,你在第一個容器中定義了一個 ENV 變量,而不是在第二個容器中(你可能想完全擺脫那個 ENV 和文件夾,我沒有看到任何意義)

我稍微修改了你的 Dockerfile 并在一個新的 maven 項目上進行了測試

我還在RUN mvn dependency:go-offline -B您的第一個容器中添加了緩存中間容器以便更快地重新構建


查看完整回答
反對 回復 2023-04-19
?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

您的第一次嘗試幾乎是正確的,減去一個問題。環境變量對于容器的上下文是局部的。它們不會在構建階段之間繼承。


在這個片段中


FROM tomcat:8.5.43-jdk8


COPY --from=maven_builder $HOME/wc_admin/target/wc-admin.war /usr/local/tomcat/webapps

tomcat$HOME圖像對maven圖像的環境變量一無所知


FROM maven:3.6.1-jdk-8 as maven_builder


ENV HOME=/app

因此它使用自己的$HOMEenvar。


嘗試這個:


COPY --from=maven_builder /app/wc_admin/target/wc-admin.war /usr/local/tomcat/webapps


查看完整回答
反對 回復 2023-04-19
  • 3 回答
  • 0 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號