這篇文章帶給大家的內容是關於Java程式製作Docker Image的方法過程,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
這裡先給一些Docker Image製作的要求,之後我們再看怎麼做。
製作過程要融合在專案建置過程中
使用官方Image作為基礎Image
使用官方Image作為基礎Image
設定正確的時區
Container內的程式以非root使用者啟動
#指定Web程式的介面
能夠傳遞JVM參數、Java System Properties、程式自訂的參數
#下面具體講一下具體怎麼做到以上幾點:
這裡推薦使用Spotify的dockerfile-maven-plugin,理由是這個plugin用起來最簡單且容易掌握。
該plugin的本質上是你寫一個Dockerfile(關於Dockerfile的具體寫法請參考官方文件),這個plugin把一些參數傳遞進去來幫助你建立Docker Image。
使用官方Image作為基礎Image
openjdk repository提供了各種各樣的image tags看起來眼花繚亂,但是本質上來說就這麼幾個:
openjdk:
openjdk:
#openjdk:
關於
FROM openjdk:8-alpine
從尺寸上來講,alpine最小、slim稍大、預設的最大。所以應該盡可能的使用alpine版本的,如果發現程式的運作環境缺少某些東西,那麼試著用slim版本或預設版本。就目前的經驗來講:
如果需要作業系統字體庫,那就得使用slim版本或預設版本。需要作業系統字體庫的程式例如:圖片驗證碼、PDF匯出。
如果需要某些Linux標準的動態/靜態連接庫,那麼在alpine版本不行的情況下,嘗試slim版本或預設版本。因為alpine版本是一個及其精簡的Linux,它刪除了很多東西。
設定正確的時區
ENV TZ=Asia/Shanghai RUN set -eux; \ ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \ echo $TZ > /etc/timezone
Container內的程式以非root用戶啟動
gosu的Dockerfile指南在這裡。
指定Web程式的介面對於連網應用而言,必須在Dockerfile中指定暴露的端口,否則該端口無法映射。
EXPOSE 8080
能夠傳遞JVM參數、Java System Properties、程式自訂的參數
我們需要能夠在啟動Docker Image的時候將一些參數傳遞進去:
JVM參數
Java System Properties
這裡就需要參考Dockerfile best practice和Docker ENTRYPOINT了。
範例專案範例專案原始程式碼在這裡:https://github.com/chanjarster/dockerfile-examples/
目錄結構 #所有與程式相關的東西都存放在
下:
/home/java-app ├── docker-entrypoint.sh ├── lib │ └── java-app.jar ├── etc ├── logs └── tmp
mvn clean package dockerfile:build
docker run -p 8080:8080 chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
docker run -p 8080:8080 -e JVM_OPTS='-Xmx128M -Xms128M' chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
docker run -p 8080:8080 -e JAVA_ARGS='-Dabc=xyz -Ddef=uvw' chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
docker run -p 8080:8080 chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT --debug
以上是Java程式製作Docker Image的方法流程的詳細內容。更多資訊請關注PHP中文網其他相關文章!