Docker 部署jar包


Docker這門技術也是開發中我們值得掌握的一門技術。接下我們就來探究一下, 怎么使用Docker容器化的技術來構建並運行,Spring Boot項目的可執行Jar包。

演示環境

  • CentOS 7
  • Docker 1.13.1
  • Spring Boot 2.1.1.RELEASE

准備一個Spring Boot項目

構建一個 Spring Boot項目的方式有很多,也不是我們討論的重點,這里就不多做描述了。我們在項目中准備一個簡單的HelloController,其中有一個sayHello()方法映射到我們訪問項目的跟路徑,訪問時返回:Hello Jerome, This is docker image !

package xin.jerome.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("") public String sayHello() { return "Hello Jerome, This is docker image !"; } }

 

對項目打包,生成可執行jar

我們到項目的根目錄,運行mvn clean package對項目進行打包,運行之后會在target目錄下生成一個xxx.jar的可執行jar文件。

制作Docker鏡像

首先我們將准備的xxx.jar拷貝到我們的CentOS 7機器上,拷貝的方法就不做描述了,大家各顯神通吧。這里我是將我生成docker-demo-0.0.1.jar拷貝到了/usr/local/apps文件夾下/

編寫Dockerfile

在該目錄下創建Dockerfile 文件,使用vi Dockerfile對文件進行編輯。

FROM java:8
VOLUME /tmp
ADD docker-demo-0.0.1.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

上面命令的相關解釋:

  1. 從docker倉庫獲取openjdk作為我們項目的容器
  2. VOLUME指向了一個/tmp的目錄,由於Spring Boot使用內置的Tomcat容器,Tomcat默認使用/tmp作為工作目錄。效果就是在主機的/usr/local/apps目錄下創建了一個臨時文件,並連接到容器的/tmp
  3. 項目的docker-demo-0.0.1.jar作為app.jar添加到容器。
  4. ENTRYPOINT 執行項目 app.jar。為了縮短 Tomcat 啟動時間,添加一個系統屬性指向/dev/urandom 作為 Entropy Source
  5. # from java:8   拉取一個jdk為1.8的docker image

    # maintainer  作者是bingo

    # demo-0.0.1-SNAPSHOT.jar 就是你上傳的jar包,替換為jar包的名稱

    # demo.jar  是你將該jar包重新命名為什么名稱,在容器中運行

    #  expose  該容器暴露的端口是多少,就是jar在容器中以多少端口運行

    # entrypoint 容器啟動之后執行的命令,java -jar demo.jar  即啟動jar

構建Docker鏡像

我們在/usr/local/apps目錄下,執行Docker的命令來構建鏡像。

 docker build -t jerome.xin/docker-demo:latest .

這個命令就是使用Dockerbuild命令來構建鏡像,並給鏡像起了一個名字jerome.xin/docker-demoTAGlatest在當前文件夾下。

我們使用docker images來查看所有的鏡像。

[root@localhost testdocker]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
jerome.xin/docker-demo   latest              ab3426243fac        56 minutes ago      119 MB
docker.io/openjdk        8-jdk-alpine        97bc1352afde        5 weeks ago         103 MB

我們發現鏡像列表里面有我們生成的鏡像jerome.xin/docker-demo

運行鏡像

通過上面的步驟我們就已經完成了鏡像的創建,接下來我們只需要使用

docker run -d --restart=always --name jerome.xin/docker-demo -v /usr/local/apps/docker-demo/logs:/home/docker-demo/logs -p 7500:7500 jerome.xin/docker-demo  命令來運行我們的項目。

這個表示docker容器在停止或服務器開機之后會自動重新啟動 --restart=always

-v /usr/local/apps/docker-demo/logs:/home/docker-demo/logs:將鏡像內/home/docker-demo/logs目錄的日志掛載到宿主機/usr/local/apps/docker-demo/logs目錄下

-p 7500:7500:端口映射,默認啟動的是7500

docker logs --tail  300 -f  demo  查看啟動日志 


免責聲明!

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



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