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
好了,以上就是本文的全部內容了,如果覺得有收穫,記得三連,我們下期再見。