java添加容器_如何为Java应用程序构建docker容器
我想要做的是為我的Java應用程序構建一個docker鏡像,但對于大多數編譯語言,以下注意事項應該是正確的.
問題
在我的構建服務器上,我想為我的應用程序生成一個docker鏡像作為可交付成果.為此,我必須使用一些構建工具(通常是Gradle,Maven或Ant)編譯應用程序,然后將創建的JAR文件添加到docker鏡像.因為我希望docker鏡像只執行JAR文件,我當然會從已安裝Java的基本映像開始.
有三種方法可以做到這一點:
讓構建工具控制進程
在這種情況下,我的構建工具控制整個過程.因此它準備了JAR文件,在創建JAR之后,它調用Docker來創建映像.這是因為事先創建了JAR,Docker可能會忘記創建JAR所需的構建過程.
但我的Dockerfile不再是獨立的.這取決于在Docker之外發生的步驟.在我的Dockerfile中,我將有一個COPY或ADD語句,它應該將JAR文件復制到映像中.事先未創建jar時,此語句將失敗.所以只是執行Dockerfile可能不起作用.如果要與使用Dockerfile構建的服務集成(如DockerHub上的自動構建功能),則會出現問題.
讓Docker控制構建
在這種情況下,創建映像的所有必要步驟都將添加到Dockerfile中,因此只需執行Docker構建即可創建映像.
這種方法的主要問題是無法添加應該在正在創建的docker鏡像之外執行的Dockerfile命令.這意味著我必須將我的源代碼和構建工具添加到docker鏡像并在圖像中構建我的JAR文件.這將導致我的圖像比必須更大,因為添加的所有文件在運行時都是不必要的.這也將為我的圖像添加額外的圖層.
編輯:
正如@adrian-mouat所指出的,如果我要添加源代碼,構建應用程序并在一個RUN語句中刪除源代碼,我可以避免向Docker鏡像添加不必要的文件和圖層.這意味著要創造一些瘋狂的鏈式命令.
兩個獨立的構建
在這種情況下,我們將構建分為兩部分:首先,我們使用構建工具創建JAR文件,然后將其上傳到存儲庫(Maven或Ivy存儲庫).然后,我們觸發一個單獨的Docker構建,只是從存儲庫添加JAR文件.
結論
在我看來,更好的方法是讓構建工具控制流程.這將產生干凈的泊塢窗圖像,因為圖像是我們想要提供的,這是非常重要的.為避免可能無法正常工作的Dockerfile,應將其作為構建的一部分創建.因此,沒有人會不小心使用它來開始破壞構建.
但這不允許我與DockerHub集成.
題
我還有另一種方法嗎?
總結
以上是生活随笔為你收集整理的java添加容器_如何为Java应用程序构建docker容器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球CPU出货量同比下降达34% 英特尔
- 下一篇: 年营收实现1000亿元!TCL李东生新目