1. 程式人生 > 其它 >Docker一鍵部署 SpringBoot 應用的方法,賊快賊好用!

Docker一鍵部署 SpringBoot 應用的方法,賊快賊好用!

這兩天發現個Gradle外掛,支援一鍵打包、推送Docker映象。今天我們來講講這個外掛,希望對大家有所幫助!

Gradle Docker Plugin 簡介

一款可以通過遠端API管理Docker映象和容器的外掛,專為Java應用打造,原生支援SpringBoot。

使用該外掛具有如下特性:

  • 與構建工具Gradle及其DSL無縫整合。
  • 在幕後處理Docker客戶端和守護程式之間的複雜通訊邏輯。
  • 簡化了複雜工作流程的定義。
  • 最大程度地減少構建指令碼的編寫邏輯。

該外掛由以下三個外掛組成:

  • com.bmuschko.docker-remote-api:提供自定義任務,可以通過遠端API與Docker進行互動。
  • com.bmuschko.docker-java-application:為Java應用建立並推送Docker映象。
  • com.bmuschko.docker-spring-boot-application:為SpringBoot應用建立並推送Docker映象。

操作映象

還是以我的腳手架專案mall-tiny為例,讓我們來看看使用該外掛打包推送Docker映象是不是夠快夠簡單!

構建映象

  • 要使用該外掛,我們需要在build.gradle中進行如下配置,這裡選擇使用遠端API外掛和SpringBoot外掛;
plugins {
    id 'com.bmuschko.docker-remote-api' version '6.7.0'
    id 'com.bmuschko.docker-spring-boot-application' version '6.7.0'
} 
  • 然後在ext節點下面定義一個常量,這裡定義好了映象倉庫地址,方便我們之後引用;
ext{
    registryUrl='192.168.5.78:5000'
} 
  • 接下來就是非常重要的外掛配置了,配置好Docker遠端API的訪問路徑,還有SpringBoot應用映象相關配置;
docker {
    url = 'tcp://192.168.5.78:2375'
    springBootApplication {
        baseImage = 'java:8'
        maintainer = 'macrozheng'
        ports = [8080]
        images = ["${registryUrl}/mall-tiny/${rootProject.name}:${version}"]
        jvmArgs = ['-Dspring.profiles.active=prod']
    }
} 
  • 接下來我們來解讀下這些配置到底有什麼作用;

    image.png

  • 接下來我們直接在IDEA中使用dockerBuildImage命令,即可將應用映象打包到遠端伺服器上去;

    image.png

  • 讓我們看下控制檯輸出的日誌,其實就是給我們預設建立了一個Dockerfile(連Dockerfile都省的寫了),然後用它來打包Docker映象;

> Task :dockerBuildImage
Building image using context 'I:\developer\gitee\mall-tiny-gradle\build\docker'.
Using images '192.168.5.78:5000/mall-tiny/mall-tiny:1.0.0-SNAPSHOT'.
Step 1/8 : FROM java:8
 ---> d23bdf5b1b1b
Step 2/8 : LABEL maintainer=macrozheng
 ---> Running in 9a63f56a03ae
Removing intermediate container 9a63f56a03ae
 ---> ed45af8fff90
Step 3/8 : WORKDIR /app
 ---> Running in 8bd4b513eb23
Removing intermediate container 8bd4b513eb23
 ---> d27759d1d7df
Step 4/8 : COPY libs libs/
 ---> 84c3a983972a
Step 5/8 : COPY resources resources/
 ---> c8a27f3475fc
Step 6/8 : COPY classes classes/
 ---> 3a76a8efc02b
Step 7/8 : ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-cp", "/app/resources:/app/classes:/app/libs/*", "com.macro.mall.tiny.MallTinyApplication"]
 ---> Running in e56ae56fd6eb
Removing intermediate container e56ae56fd6eb
 ---> 22d73f95e756
Step 8/8 : EXPOSE 8080
 ---> Running in b21d898456cb
Removing intermediate container b21d898456cb
 ---> 73684cf8c643
Successfully built 73684cf8c643
Successfully tagged 192.168.5.78:5000/mall-tiny/mall-tiny:1.0.0-SNAPSHOT
Created image with ID '73684cf8c643'.

BUILD SUCCESSFUL in 34s
5 actionable tasks: 5 executed
10:56:15: Task execution finished 'dockerBuildImage'. 
  • 在專案的build\docker資料夾下可以發現這個Dockerfile,具體內容如下:
FROM java:8
LABEL maintainer=macrozheng
WORKDIR /app
COPY libs libs/
COPY resources resources/
COPY classes classes/
ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-cp", "/app/resources:/app/classes:/app/libs/*", "com.macro.mall.tiny.MallTinyApplication"]
EXPOSE 8080 
  • 打包完映象之後,直接使用如下命令即可執行專案,注意安裝好MySQL和Redis。
docker run -p 8080:8080 --name mall-tiny \
--link mysql:db \
--link redis:redis \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny/logs:/var/logs \
-d 192.168.5.78:mall-tiny/mall-tiny:1.0.0-SNAPSHOT 

推送映象

  • 接下來我們試試推送映象功能,不過首先需要安裝一個映象倉庫,

  • 推送映象也是非常簡單的,直接在IDEA中使用dockerPushImage命令即可;

    image.png

  • 推送完成後,在我們的視覺化映象倉庫中就可以看到該映象了。

    image.png

對比Maven

我們通過把專案clean以後再打包成Docker映象,對比下使用Gradle和Maven的速度。

  • 使用Gradle進行clean並構建Docker映象,耗時30s

    image.png

  • 使用Maven進行clean並構建Docker映象,耗時58s,果然Gradle還是能比Maven快一倍的!

    image.png

總結

今天我們體驗了一把Gradle和Docker結合使用,發現真是夠快夠簡單。對比Maven速度快了一倍,內建了Dockerfile,大大降低了配置難度。

最後

最近我整理了整套《JAVA核心知識點總結》,說實話 ,作為一名Java程式設計師,不論你需不需要面試都應該好好看下這份資料。拿到手總是不虧的~我的不少粉絲也因此拿到騰訊位元組快手等公司的Offer

Java進階群

好了,以上就是本文的全部內容了,如果覺得有收穫,記得三連,我們下期再見。