首先說說爲何要進行鏡像壓縮,docker鏡像內部分層結構,致使某些層上面的依賴多餘,在某種特定場景下這些依賴其實並不會用到,所以,針對特定場景,咱們能夠將這些多餘的依賴進行刪除,縮小鏡像體積節省資源。html
JRE官方下載網站爲:官方下載java
下載時請注意你所用的機器的系統以及位數,不要在32位機器上安裝了64位的包,那就尷尬了老鐵。linux
下載完成以後大概就長下面這個樣子:docker
咱們重點看下Dockerfile1
和jre-8u221-linux-x64.tar.gz
兩個文件便可~bash
解壓縮剛剛下載的包,使用下面命令jsp
tar -zxvf jre-8u221-linux-x64.tar.gz
cd jre1.8.0_221/
rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txt THIRDPARTYLICENSEREADME.txt Welcome.html
rm -rf lib/plugin.jar \
lib/ext/jfxrt.jar \
bin/javaws \
lib/javaws.jar \
lib/desktop \
plugin \
lib/deploy* \
lib/*javafx* \
lib/*jfx* \
lib/amd64/libdecora_sse.so \
lib/amd64/libprism_*.so \
lib/amd64/libfxplugins.so \
lib/amd64/libglass.so \
lib/amd64/libgstreamer-lite.so \
lib/amd64/libjavafx*.so \
lib/amd64/libjfx*.so
tar zcvf jdk8.tar.gz *
mv jdk8.tar.gz ..
cd ..
ll
複製代碼
執行完以後大概就以下圖,咱們從新打包生成了一個jre8文件叫jdk8.tar.gz
,注意這裏解壓出來以後是沒有目錄的,在編寫下邊的Dockerfile
文件時要特別注意。微服務
接下來咱們根據咱們生成的jdk8.tar.gz
文件構建出一個jdk8鏡像,編寫Dockerfile
文件以下:測試
# using alpine-glibc instead of alpine is mainly because JDK relies on glibc
FROM docker.io/jeanblanchard/alpine-glibc
# 維護者信息
MAINTAINER hjw <v:lifvalue>
# ADD指令:拷貝文件並解壓 COPY指令:拷貝文件
ADD jdk8.tar.gz /usr/local/software/
# 設置相關java環境變量
ENV JAVA_HOME /usr/local/software
ENV PATH ${PATH}:${JAVA_HOME}/bin
# 這個指令表示,咱們運行容器時,容器默認的工做目錄
WORKDIR /opt
複製代碼
注意,這個Dockerfile
文件最後不要增長ENTRYPOINY
指令,加上以後可能會有xxxxxx directory
的坑。網站
下邊咱們構建咱們本身的jdk8鏡像。ui
docker build -f Dockerfile1 -t xxx/jdk8 .
複製代碼
構建完成以後,會用docker images
能夠查看咱們剛剛生成的鏡像,以下:
執行下面命令啓動一個容器,看看java環境變量是否生效:
docker run -it 3015
3015
爲鏡像ID的前4位,最後使用exit
退出容器。
在服務中使用很簡單,只須要在FROM
指令中引入便可,以下:
FROM xxx/jdk8
複製代碼