日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

一步步把一个SpringBoot应用打包成Docker镜像并运行

發(fā)布時(shí)間:2023/12/19 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一步步把一个SpringBoot应用打包成Docker镜像并运行 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(1) 首先要有一個(gè)可以工作的SpringBoot應(yīng)用。

從Jerry的github上clone這個(gè)github repository到本地:

cd進(jìn)入項(xiàng)目文件夾內(nèi),使用命令行mvn spring-boot:run

當(dāng)看到控制臺(tái)輸出 Tomcat started on port: 5030(http)的提示后,說(shuō)明SpringBoot應(yīng)用在本地啟動(dòng)成功,

這時(shí)用下面的url可以訪問(wèn)這個(gè)SpringBoot應(yīng)用,如果一切正常,
http://localhost:5030/commerce/product

可以在瀏覽器里看到Hello World:

祝:該SpringBoot應(yīng)用監(jiān)聽的端口為5030,如果想修改成其他端口,在application.properties里修改。

(2) 下一步是登錄阿里云服務(wù)器,將該SpringBoot打包成Docker鏡像。

我的github倉(cāng)庫(kù)里已經(jīng)寫好了一個(gè)Dockerfile文件,Docker鏡像就是基于該Dockerfile進(jìn)行制作。

第一行的FROM命令,指定了我們這個(gè)鏡像基于openjdk這個(gè)鏡像制作。

第二行的VOLUME命令,定義了一個(gè)持久化存儲(chǔ),指向容器中的tmp文件夾。SpringBoot應(yīng)用為內(nèi)置的Tomcat服務(wù)器實(shí)例創(chuàng)建的默認(rèn)工作目錄為tmp,通過(guò)該命令,可以在運(yùn)行Docker的宿主機(jī)目錄/var/lib/docker創(chuàng)建一個(gè)臨時(shí)的目錄,掛接到容器內(nèi)部的tmp去。

如果你的SpringBoot應(yīng)用不會(huì)進(jìn)行持久化寫操作,則該步驟可以省略。

第三行,把本地目錄下target文件夾里打好的jar文件添加到容器里,重命名為app.jar.

第四行:ENV命令的作用是設(shè)置環(huán)境變量。在復(fù)雜的使用場(chǎng)景中,我們可能需要使用各種參數(shù)啟動(dòng)JVM,這些參數(shù)通過(guò)ENV命令設(shè)置的環(huán)境變量傳入Java命令。在這個(gè)簡(jiǎn)單的例子里可以省略環(huán)境變量的設(shè)置。

第五行:ENTRYPOINT,顧名思義,容器鏡像運(yùn)行的起始點(diǎn)。

了解了這個(gè)Dockerfile的作用和語(yǔ)法后,我們使用docker build基于這個(gè)Dockerfile生成一個(gè)鏡像。

docker build -t jerry/springbootexample:v1 .

上面命令行最后的".“并不是表示結(jié)束的標(biāo)點(diǎn)符號(hào),而是Linux系統(tǒng)里的”.", 代表當(dāng)前目錄。

執(zhí)行上述命令行后,會(huì)看到我們?cè)贒ockerfile里定義的5條命令被依次執(zhí)行,首先是下載openJDK這個(gè)基礎(chǔ)鏡像:

然后依次執(zhí)行剩余步驟。

看到Successfully built 提示消息后,說(shuō)明該鏡像成功創(chuàng)建了。

使用docker images命令行能看到這個(gè)鏡像,大小為136MB.

(3) 最后,就是使用docker run命令執(zhí)行這個(gè)鏡像。

run命令有很多參數(shù),比如以交互式方式運(yùn)行鏡像:

docker run -it jerry/springbootexample:v1

這種方式下,鏡像處理用戶請(qǐng)求時(shí)的輸出會(huì)自動(dòng)重定向到宿主機(jī)的控制臺(tái)上。

而-p參數(shù)可以實(shí)現(xiàn)端口映射,下面命令行的含義是把Docker內(nèi)SpringBoot應(yīng)用監(jiān)聽的端口映射到宿主機(jī)的8000端口。這樣,當(dāng)用戶在瀏覽器里訪問(wèn)時(shí),使用的端口應(yīng)該是宿主機(jī)的端口8000.

docker run -p 8000:9000 --name jerrydockerdemo -d jerry/springbootexample:v1

可以使用docker ps命令拿到該運(yùn)行鏡像的ID,再用docker stop命令終止鏡像的運(yùn)行。

也可以使用命令docker exec -it, 進(jìn)入一個(gè)正在運(yùn)行的容器內(nèi)部:

sudo docker exec -it 8302db78f838 /bin/sh

我們之前在編寫Dockerfile時(shí),用VOLUME指令創(chuàng)建的tmp,此時(shí)進(jìn)入容器內(nèi)部就可以觀察到了。在tmp里,果然發(fā)現(xiàn)了SpringBoot在執(zhí)行過(guò)程中,其內(nèi)置的Tomcat實(shí)例運(yùn)行時(shí)工作目錄下生成的數(shù)據(jù)。

要獲取更多Jerry的原創(chuàng)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙":

總結(jié)

以上是生活随笔為你收集整理的一步步把一个SpringBoot应用打包成Docker镜像并运行的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。