首頁  >  文章  >  Java  >  Java程式製作Docker Image的方法流程

Java程式製作Docker Image的方法流程

不言
不言原創
2018-09-19 15:35:332148瀏覽

這篇文章帶給大家的內容是關於Java程式製作Docker Image的方法過程,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

要求

這裡先給一些Docker Image製作的要求,之後我們再看怎麼做。

  1. 製作過程要融合在專案建置過程中

  2. 使用官方Image作為基礎Image

  3. 使用官方Image作為基礎Image

  4. 設定正確的時區

  5. Container內的程式以非root使用者啟動

#指定Web程式的介面

能夠傳遞JVM參數、Java System Properties、程式自訂的參數

#下面具體講一下具體怎麼做到以上幾點:

#製作過程要融合在專案建置過程中

這裡推薦使用Spotify的dockerfile-maven-plugin,理由是這個plugin用起來最簡單且容易掌握。

該plugin的本質上是你寫一個Dockerfile(關於Dockerfile的具體寫法請參考官方文件),這個plugin把一些參數傳遞進去來幫助你建立Docker Image。

    因此只要你會寫Dockerfile,就會使用這個plugin,它沒有加入任何額外的概念。
  • 使用官方Image作為基礎Image

  • Java的基礎鏡像應該在openjdk repository裡尋找,而不是在已經過時的java repository裡找。
  • openjdk repository提供了各種各樣的image tags看起來眼花繚亂,但是本質上來說就這麼幾個:

  • openjdk:

openjdk:-slim

#openjdk:-alpine

關於

一般來說指定大版本號就行了,例如你可以在Dockerfile這樣寫:

FROM openjdk:8-alpine

從尺寸上來講,alpine最小、slim稍大、預設的最大。所以應該盡可能的使用alpine版本的,如果發現程式的運作環境缺少某些東西,那麼試著用slim版本或預設版本。就目前的經驗來講:

  • 如果需要作業系統字體庫,那就得使用slim版本或預設版本。需要作業系統字體庫的程式例如:圖片驗證碼、PDF匯出。

  • 如果需要某些Linux標準的動態/靜態連接庫,那麼在alpine版本不行的情況下,嘗試slim版本或預設版本。因為alpine版本是一個及其精簡的Linux,它刪除了很多東西。

  • 設定正確的時區

  • 幾乎所有的Docker Image的時區都是UTC,我們需要為我們自己製作的Docker Image設定時區:
ENV TZ=Asia/Shanghai
RUN set -eux; \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
    echo $TZ > /etc/timezone

Container內的程式以非root用戶啟動

在Docker Image內部,我們應該使用非root用戶啟動程序,這需要使用到gosu。

gosu的Dockerfile指南在這裡。

記得要根據不同的基礎Image選擇適合的安裝方式。

指定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/

下:

/home/java-app
   ├── docker-entrypoint.sh
   ├── lib
   │   └── java-app.jar
   ├── etc
   ├── logs
   └── tmp
###docker-entrypoint.sh,啟動腳本######lib,存放JAR套件######lib/java-app.jar,程式JAR套件######etc,存放設定檔######logs,存放日誌檔案######tmp,存放臨時檔案######建構Image的方法###
mvn clean package dockerfile:build
###執行######普通啟動,然後造訪###http://localhost:8080###:###
docker run -p 8080:8080 chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
## #設定JVM參數,使用###JVM_OPTS###環境變數:###
docker run -p 8080:8080 -e JVM_OPTS='-Xmx128M -Xms128M' chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
###設定System Properties,使用###JAVA_ARGS###環境變數:###
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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn