把java(springboot)程序打包docker鏡像


前言:要在docker運行java(jar包)程序,就要把程序打包成docker鏡像(以下簡稱鏡像),可以先理解為鏡像就是jar包

 

打包需要程序代碼,java本身的打包環境(包括jdk和maven),以及docker,因此本文在裝了以上環境的環境(尤其是裝了docker)進行打包

 

首先要修改代碼


 

使用ewater框架開發的程序,代碼文件需要修改,才能進行打包成docker鏡像

 

在此路徑添加名為Dockerfile的文件

 

 

內容為:

FROM openjdk:8-jdk-alpine

VOLUME /tmp

ADD ewater-0.0.1.jar app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

PS:第3行的“ewater-0.0.1.jar”要按maven打包輸出的文件實際修改

 

 

 

修改pom文件

 

 

<docker.image.prefix>springio</docker.image.prefix>

 

 

 

            <plugin>

                <groupId>com.spotify</groupId>

                <artifactId>docker-maven-plugin</artifactId>

                <version>0.4.14</version>

                <configuration>

                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>

                    <!--指定docker鏡像的版本號-->

                    <imageTags>

                        <!--使用maven項目的版本號-->

                        <imageTag>${project.version}</imageTag>

                        <imageTag>latest</imageTag>

                    </imageTags>

                    <dockerDirectory>src/main/docker</dockerDirectory>

                    <resources>

                        <resource>

                            <targetPath>/</targetPath>

                            <directory>${project.build.directory}</directory>

                            <include>${project.build.finalName}.jar</include>

                        </resource>

                    </resources>

                </configuration>

            </plugin>

 

 

修改代碼完畢,接原文


 

 

然后把代碼拷到打包的電腦,cd進代碼目錄(pom文件所在目錄)

-P dev-docker

運行mvn package -P dev-docker docker:build,把程序打包為鏡像。第一次打包會久一些

PS:參數-P是指定打包使用的profile名稱,不一定需要

PS:成功的樣子

 

 

 

運行docker image ls,列出所有本地鏡像,可以看到剛才打包的

 

 

PS:為什么一個鏡像有兩行?先不展開,注意他們tag不一樣

 

鏡像打包到此完成

 


 

下面還擴展一下:在docker以鏡像方式運行java程序

 

Dokcer可以單獨使用,k8s不是必須的,在有k8s之前docker就是單獨使用

 

本文假設java程序的鏡像已經打包好且在本地,運行的是以下鏡像

 

 

 

運行docker run -p 20801:20801 -t springio/ewater,啟動名為springio/ewater的鏡像

端口:兩個20801代表http端口,因為本java程序是springboot,springmvc開發,有http請求功能,所以需要端口

PS:啟動時有命令行輸出,內容跟直接運行jar包差不多

 

 

 

到此啟動成功,可以在瀏覽器訪問里面的http請求來測試

PS:ip是master1的ip,端口是docker run指定的端口

 

 

 

擴展:如何停止運行中的鏡像?

首先科普個新名稱——容器(container),鏡像運行時叫容器,一個鏡像可以開啟運行多個容器(就像一個jar包可以同時在多個tomcat運行)

因此問題應該是如何停止運行中的容器

 

運行docker ps,可見所有運行中的容器

 

 

 

CONTAINER ID是容易的唯一id

 

然后有以下的命令:

停止運行容器(fca333c9ce5f代表容器id)

docker stop fca333c9ce5f

刪除容器

docker rm fca333c9ce5


免責聲明!

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



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