Docker部署SpringBoot應(yīng)用的實(shí)現(xiàn)步驟
部署項(xiàng)目時(shí)可能會(huì)需要依賴于node.js、Redis、RabbitMQ、MySQL等,這些服務(wù)部署時(shí)所需要的函數(shù)庫(kù)、依賴項(xiàng)各不相同,甚至?xí)袥_突。給部署帶來(lái)了極大的困難。而Docker確巧妙的解決了這些問(wèn)題,Docker為了解決依賴的兼容問(wèn)題的,采用了兩個(gè)手段:
- 將應(yīng)用的Libs(函數(shù)庫(kù))、Deps(依賴)、配置與應(yīng)用一起打包
- 將每個(gè)應(yīng)用放到一個(gè)隔離容器去運(yùn)行,避免互相干擾
本文將講解如何使用Docker來(lái)部署我們平時(shí)用SpringBoot開(kāi)發(fā)的項(xiàng)目:
Dockerfile
什么是 Dockerfile?
Dockerfile 是一個(gè)用來(lái)構(gòu)建鏡像的文本文件,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說(shuō)明。
Dockerfile語(yǔ)法
構(gòu)建自定義的鏡像時(shí),并不需要一個(gè)個(gè)文件去拷貝,打包。
我們只需要告訴Docker,我們的鏡像的組成,需要哪些BaseImage、需要拷貝什么文件、需要安裝什么依賴、啟動(dòng)腳本是什么,將來(lái)Docker會(huì)幫助我們構(gòu)建鏡像。
而描述上述信息的文件就是Dockerfile文件。
Dockerfile就是一個(gè)文本文件,其中包含一個(gè)個(gè)的指令(Instruction),用指令來(lái)說(shuō)明要執(zhí)行什么操作來(lái)構(gòu)建鏡像。每一個(gè)指令都會(huì)形成一層Layer。
打包SpringBoot項(xiàng)目
準(zhǔn)備項(xiàng)目:
項(xiàng)目端口
server.port=8080
在templates文件夾下新建index.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Docker部署SpringBoot應(yīng)用</title> </head> <body> <h1>Docker部署SpringBoot應(yīng)用</h1> <img src="/static/img/2.jpg" alt="" width="100%"> </body> </html>
定義主頁(yè)Controller,跳轉(zhuǎn)到index
@Controller public class indexController { @RequestMapping("/") public String index(){ return "index"; } }
在本地預(yù)覽效果:
在本地將SpringBoot應(yīng)用打包成jar
準(zhǔn)備maven-compiler-plugin插件
<build> <!--編譯打包后的文件包名--> <finalName>app</finalName> <plugins> <plugin> <!--GAV坐標(biāo)(G組織id,A項(xiàng)目id,V版本號(hào))--> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <!--配置: 一般而言,target與source是保持一致的,但是,有時(shí)候?yàn)榱俗尦绦蚰茉谄? 他版本的jdk中運(yùn)行(對(duì)于低版本目標(biāo)jdk,源代碼中不能使用低版本jdk中不 支持的語(yǔ)法),會(huì)存在target不同于source的情況--> <configuration> <!--源代碼使用的JDK版本--> <source>1.8</source> <!-- 需要生成的目標(biāo)class文件的編譯版本 --> <target>1.8</target> <!-- 字符集編碼,防止中文亂碼 --> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
maven是個(gè)項(xiàng)目管理工具,如果不告訴它代碼要使用什么樣的jdk版本編譯,它就會(huì)用編譯插maven-compiler-plugin默認(rèn)的jdk版本來(lái)處理,這樣就容易出現(xiàn)版本不匹配的問(wèn)題,以至于可能導(dǎo)致編譯不通過(guò)的問(wèn)題。例如代碼中要是使用上了Java8的新特性,比如函數(shù)式編程,但是maven在編譯的時(shí)候使用的是Java7,那這一段代碼是完全不可能編譯成.class文件的。為了避免出現(xiàn)這種情況,在構(gòu)建maven項(xiàng)目的時(shí)候,我習(xí)慣性第一步就是配置maven-compiler-plugin插件,指定項(xiàng)目源碼的jdk 版本,編譯后的 jdk 版本,以及編碼方式。
然后執(zhí)行clean,最后執(zhí)行package進(jìn)行項(xiàng)目打包
出現(xiàn)BUILD SUCCESS說(shuō)明打包成功了
打包成功后會(huì)出現(xiàn)target文件夾,目錄下就會(huì)有剛剛打包的jar包
準(zhǔn)備jar包和Dockerfile
復(fù)制jar到桌面或自定義位置,在本地創(chuàng)建編寫Dockerfile文件(注:名字必須為Dockerfile,去掉后綴名)
編寫Dockerfile
Dockerfile指令
FROM java:8-alpine COPY ./app.jar /tmp/app.jar ENTRYPOINT java -jar /tmp/app.jar
Dockerfile說(shuō)明
FROM java:8-alpine:
基于java8構(gòu)建鏡像,默認(rèn)構(gòu)建java鏡像需要安裝配置環(huán)境變量,而java:8-alpine這個(gè)鏡像已經(jīng)幫我們把前面的步驟都做完了
COPY ./app.jar /tmp/app.jar
復(fù)制jar包
ENTRYPOINT java -jar /tmp/app.jar
入口命令
使用工具將jar和Dockerfile上傳到服務(wù)器
上傳位置看個(gè)人,我存放的位置:/tmp/docker
cd tmp mkdir docker
選擇上傳文件
上傳到/tmp/docker
目錄下
構(gòu)建鏡像
進(jìn)入上傳文件的目錄:cd /tmp/docker
,輸入ls
查看文件
輸入命令構(gòu)建鏡像
docker build -t test:1.0 .
格式:docker build -t 鏡像名稱:版本號(hào) Dockerfile所在目錄路徑
命令說(shuō)明:
build
:docker的二級(jí)命令
- 構(gòu)建鏡像
-t
- -名稱: 一般的鏡像名稱格式:名稱:版本號(hào)(
test:1.0
)
.
- Dockerfile所在目錄,因?yàn)槲覀円呀?jīng)進(jìn)入了Dockerfile所在的目錄,
.
代表當(dāng)前目錄
可以看到構(gòu)建鏡像的時(shí)候會(huì)以我們編寫Dockerfile的三條命令分為3個(gè)步驟執(zhí)行
查看鏡像
查看Docker中的鏡像命令:
docker images
可以看到我們自定義鏡像test
創(chuàng)建并運(yùn)行容器
運(yùn)行Docker鏡像命令:
docker run --name springboot -p 8080:8080 -d test:1.0
命令說(shuō)明:
docker run
: docker二級(jí)命令
- 創(chuàng)建并運(yùn)行容器
--name
- 定義容器名稱,后面跟上容器名稱(
springboot
)
-p
端口映射
- 左邊端口為L(zhǎng)inux的端口 ,右邊為容器的端口號(hào)
- 將linux端口映射在容器端口號(hào)上,這樣訪問(wèn)linux端口等于訪問(wèn)容器端口號(hào)
-d
- 后臺(tái)運(yùn)行容器 ,否則退出之后容器就會(huì)停止運(yùn)行
test:1.0
–>鏡像名稱
- 選擇自定義鏡像
test
的1.0版本來(lái)創(chuàng)建容器
創(chuàng)建并運(yùn)行容器成功!
查看正在運(yùn)行的鏡像
正在運(yùn)行的鏡像命令
docker ps
瀏覽器訪問(wèn)服務(wù)器的8080端口
手機(jī)訪問(wèn):
查看日志
查看容器日志命令
docker logs -f springboot
說(shuō)明:
查看容器日志但是不是實(shí)時(shí)更新,想要查看新的日志還需要重復(fù)運(yùn)行
docker logs + 容器名稱
實(shí)時(shí)更新日志
docker logs -f + 容器名稱
Docker部署SpringBoot應(yīng)用教程結(jié)束!
到此這篇關(guān)于Docker部署SpringBoot應(yīng)用的文章就介紹到這了,更多相關(guān)Docker部署SpringBoot應(yīng)用內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。