Docker Java程序鏡像制作


Docker Java程序鏡像制作


制作前的准備

  • jre:不需要完整的jdk,jre即可,到Oracle進行下載即可,下載鏈接,根據自己的情況進行選擇,這里選擇jre-8u221-linux-x64.tar.gz,一般只能使用解壓安裝了,rpm的可以直接使用yum命令進行安裝,但我們這里用不了
  • jar包:自己寫好的程序的可執行jar,放到鏡像中直接運行即可

制作步驟

  • mkdir docker:創建一個制作鏡像的工作目錄,里面用於存放構建鏡像需要的文件,如jre和jar包,還有鏡像構建文件Dockfile
  • 在目錄下放入jar包和jre
  • 生產Dockfile文件並進行編寫,編寫示例和說明如下,下面的操作環境是centos7
# 創建鏡像制作目錄
mkdir docker
cd docker

# 將oracle的jre包和生成好的程序jar放到目錄中
# 為了制造較小體積的鏡像,不使用jdk包,也沒有必要使用它
cp ../jre-8u221-linux-x64.tar.gz ./
cp ../seckill-1.0-SNAPSHOT.jar ./

# 創建並編輯編輯Dockfile鏡像生成文件
vim Dockerfile

# 將下面的內容寫入文件中,詳細的東西在后面會有說明
FROM docker.io/jeanblanchard/alpine-glibc
ADD jre-8u221-linux-x64.tar.gz /usr/java/jdk
ENV JAVA_HOME /usr/java/jdk/jre1.8.0_221
ENV PATH ${PATH}:${JAVA_HOME}/bin
COPY seckill-1.0-SNAPSHOT.jar /home/seckill-1.0-SNAPSHOT.jar
CMD java -jar /home/seckill-1.0-SNAPSHOT.jar

# 生成名稱為seckill,版本為v0的鏡像
docker build -t seckill:v0 .
# 運行鏡像,我的Java程序是監聽在8080端口的,所以將鏡像容器的8080端口映射到宿主機的8080,並命名容器的名稱為seckill
docker run --name seckill -p 8080:8080 seckill
# 查看當前seckill容器的輸出,這里會打印顯示Java的控制台輸出內容
docker logs seckill

    下面講解下Dockfile文件的內容:

  • FROM docker.io/jeanblanchard/alpine-glibc:docker的linux鏡像有很多,比如Ubuntu、centos之類的,但他們的體積都比較大,單純一個鏡像的都是400M以上的,而其中的alpine鏡像只用不到10M,非常的小巧,所以這里就選用它作為基礎的構建鏡像。但是alpine是基於MUSL libs(mini libc)的,而Java是基於GUN Standard C (glibc)library的,如果不做任何處理的話Java不能在其上運行,而在網上有大佬已經制造安裝了glibc的alpine鏡像,我們直接使用即可
  • ADD jre-8u221-linux-x64.tar.gz /usr/java/jdk:解壓並添加jre壓縮包到/usr/java/jdk目錄下
  • ENV JAVA_HOME /usr/java/jdk/jre1.8.0_221、ENV PATH ${PATH}😒{JAVA_HOME}/bin:這種Java環境變量,這里踩過一個坑,需要注意的是JAVA_HOME的路徑設置,如果你的jre包的版本和我不一樣話,需要進行修改,我這里解壓后是jre1.8.0_221
  • COPY seckill-1.0-SNAPSHOT.jar /home/seckill-1.0-SNAPSHOT.jar:復制添加Java程序到指定目錄
  • CMD java -jar /home/seckill-1.0-SNAPSHOT.jar:設置在容器運行后啟動Java程序

    如果對docker不是太了解的話,可以查看下面的我制作過程中參考的鏈接

參考鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM