search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

構建你的第一個Java鏡像的5個小竅門

Arun Gupta是 《Docker for Java Developers》 一書的作者,本文介紹了構建Java鏡像的五個小竅門,從而以超越基本概念和框架的方式開啟Docker容器之旅。
如果你是一個熱切期待在你的組織內部遷移到容器技術的企業級軟體開發人員,那麼你會有更多的興趣來學習Docker背後的基礎概念以及圍繞Docker的常用的編排框架。在本文中,我將就這些基本概念進行擴展並提供一些簡單而使用的小竅門來構建你的第一個使用Java編程語言的Docker鏡像。
選擇一個小的基礎JDK鏡像
Docker鏡像是通過從Dockerfile讀取指令來構建的,在這裡你可以發現構建你的第一個鏡像的基礎指令。
在應用程序中一個常見的包含了JDK的基礎鏡像是默認的openjdk:latest鏡像,這是基於Debian操作系統構建的。該鏡像的大小是640.9MB,可以通過運行鏡像看到JDK版本:
docker run -it openjdk java -version
如果你想使用Oracle JDK,那麼 正常理由 Docker Hub上是沒有可用的官方Docker鏡像的,所以,你需要下載 Oracle JDK 並打包到鏡像里。在 https://github.com/arun-gupta/ ... e-jdk 上有一個可用的簡單的展示如何打包Oracle JDK的Dockerfile,以這種方式構建的鏡像是536.3MB。
Alpine Linux 是基於 musl libc 和 BusyBox 構建的精簡的Linux發行版,Docker Hub上有基於Alpine的OpenJDK鏡像,可以以openjdk:alpine下載,這個鏡像的大小是144.9MB,這是不到默認的openjdk:latest鏡像大小的25%。
為什麼說更小的鏡像體積很重要呢?這與磁碟空間沒有關係,而是一旦容器在不同的宿主機上啟動並且鏡像需要通過網路下載,那麼鏡像大小就變得至關重要了。一個更大的鏡像也就意味著需要更高的延遲來啟動鏡像。
同樣的,openjdk:8-jre是309MB,而openjdk:8-jre-alpine是107.8MB。
這裡我還想提供一些建議。確保選擇JDK或者JRE哪一個是合適的基礎鏡像,這會讓你的鏡像變小。為了進一步減少體積,你也許可以考慮使用基於Alpine的鏡像而不是默認的基於Debian的鏡像。如果你想要一個商業版本支持的JDK,那麼你也許需要構建你自己的鏡像。下面會討論該鏡像需要的底層操作系統
選擇最佳的底層操作系統
通常是從一個底層的操作系統來開始構建一個Docker鏡像的,也就是Dockerfile的FROM指令提及的。在某些情況下,你也許會從一個已有的基礎鏡像開始,這時你已經選擇了底層操作系統鏡像。但是如果你需要選擇一個底層操作系統鏡像,那麼常用的鏡像和對應的大小如下所示:
· Ubuntu:127.2MB
· CentOS:196.8MB
· Debian:123MB
· Alpine:4.803MB
· BusyBox:1.093MB
仔細選擇你的底層操作系統,因為它將添加到您的鏡像里,確保將操作系統更新到發行包的最新版本,同樣也包括依賴項。
在某些情況下,您可能需要選擇一個商業支持的操作系統。比如Red Hat Enterprise Linux或者WindowsServer 2016。這些通常是由供應商提供的。
清理構建上下文
Docker CLI是由給定一個目錄或者URL作為構建上下文的,在鏡像構建之前會將該上下文發送到Docker Daemon。建議在一個新的目錄里創建Dockerfile,然後在該目錄里只添加鏡像包含的文件。這為docker build命令提供了一個更加清潔的上下文並且允許更快地構建鏡像。否則,掃描帶有多個文件的目錄將不必要地減慢構建速度。
如果無法創建一個新目錄或者執行命令的目錄里存在著其他文件,那麼可以考慮.dockerignore文件,該文件的語法類似於.gitignore文件,允許您從構建中排除一些文件和目錄。舉例來說,如果Dockerfile放在了Maven工程的根目錄里,那麼該文件是需要的。然後這個文件可以用來從target目錄里指定生成的特定組件。
創建你自己的鏡像
你經常需要創建一個鏡像,在這裡基礎鏡像會啟動一個組件然後你的鏡像將對其作配置。舉例來說,jboss/wildfly基礎鏡像將會啟動WildFly應用伺服器,然後你的鏡像會在其中創建一些JDBC資源。另外一個例子就是couchbase鏡像啟動了Couchbase伺服器,在這種情況下,資料庫需要對於內存配額、管理憑證和其它選項進行手動配置。一個新的提供了預配置的Couchbase伺服器的Docker鏡像是非常實用的,這個已經在couchbase/server:sandbox鏡像里實現了,該鏡像使用了couchbase作為基礎鏡像,它使用了Couchbase Restful API來配置資料庫,正如在Dockerfile中說明的。
你可能還需要查看容器內的文件系統是如何陳列的,這將主要用於調試目的。
如果容器正在運行,那麼你可以使用如下命令來attach到鏡像文件系統:
docker exec -it {cid} bash
如果容器沒有運行,那麼可以使用下面的命令:

docker run -itbash

在這兩種情況下,將會使用鏡像的文件系統來打開一個Bash Shell,如果需要的話,這會允許你深入容器/鏡像文件系統並進行必要的更新。
你是否已經準備好容器化你的第一個Java應用了呢?我的新書 《Docker for Java Developer》 ,解釋了如何使用Docker打包、部署和擴展應用,此外,Github上的Docker for Java Developers教程提供了一個自學及動手實驗來構建你的第一個Java應用程序。


熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦