一步步把一個SpringBoot應用打包成Docker映象並執行

i042416發表於2020-02-16

(1) 首先要有一個可以工作的SpringBoot應用。

從Jerry的github上clone這個github repository到本地:

一步步把一個SpringBoot應用打包成Docker映象並執行


cd進入專案資料夾內,使用命令列mvn spring-boot:run

當看到控制檯輸出 Tomcat started on port: 5030(http)的提示後,說明SpringBoot應用在本地啟動成功,

一步步把一個SpringBoot應用打包成Docker映象並執行

這時用下面的url可以訪問這個SpringBoot應用,如果一切正常,

localhost:5030/commerce

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

一步步把一個SpringBoot應用打包成Docker映象並執行

注:該SpringBoot應用監聽的埠為5030,如果想修改成其他埠,在application.properties裡修改。

一步步把一個SpringBoot應用打包成Docker映象並執行

(2) 下一步是登入阿里雲伺服器,將該SpringBoot打包成Docker映象。

我的github倉庫裡已經寫好了一個Dockerfile檔案,Docker映象就是基於該Dockerfile進行製作。

一步步把一個SpringBoot應用打包成Docker映象並執行

第一行的FROM命令,指定了我們這個映象基於openjdk這個映象製作。

第二行的VOLUME命令,定義了一個持久化儲存,指向容器中的tmp資料夾。SpringBoot應用為內建的Tomcat伺服器例項建立的預設工作目錄為tmp,透過該命令,可以在執行Docker的宿主機目錄/var/lib/docker建立一個臨時的目錄,掛接到容器內部的tmp去。

如果你的SpringBoot應用不會進行持久化寫操作,則該步驟可以省略。

第三行,把本地目錄下target資料夾裡打好的jar檔案新增到容器裡,重新命名為app.jar.


第四行:ENV命令的作用是設定環境變數。在複雜的使用場景中,我們可能需要使用各種引數啟動JVM,這些引數透過ENV命令設定的環境變數傳入Java命令。在這個簡單的例子裡可以省略環境變數的設定。


第五行:ENTRYPOINT,顧名思義,容器映象執行的起始點。


瞭解了這個Dockerfile的作用和語法後,我們使用docker build基於這個Dockerfile生成一個映象。


> docker build -t jerry/springbootexample:v1 .


上面命令列最後的"."並不是表示結束的標點符號,而是Linux系統裡的".", 代表當前目錄。


執行上述命令列後,會看到我們在Dockerfile裡定義的5條命令被依次執行,首先是下載openJDK這個基礎映象:

一步步把一個SpringBoot應用打包成Docker映象並執行

然後依次執行剩餘步驟。

一步步把一個SpringBoot應用打包成Docker映象並執行

看到Successfully built 提示訊息後,說明該映象成功建立了。

使用docker images命令列能看到這個映象,大小為136MB.

一步步把一個SpringBoot應用打包成Docker映象並執行

(3) 最後,就是使用docker run命令執行這個映象。


run命令有很多引數,比如以互動式方式執行映象:

> docker run -it jerry/springbootexample:v1


這種方式下,映象處理使用者請求時的輸出會自動重定向到宿主機的控制檯上。


而-p引數可以實現埠對映,下面命令列的含義是把Docker內SpringBoot應用監聽的埠對映到宿主機的8000埠。這樣,當使用者在瀏覽器裡訪問時,使用的埠應該是宿主機的埠8000.

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

一步步把一個SpringBoot應用打包成Docker映象並執行

可以使用docker ps命令拿到該執行映象的ID,再用docker stop命令終止映象的執行。


也可以使用命令docker exec -it, 進入一個正在執行的容器內部:

> sudo docker exec -it 8302db78f838 /bin/sh


我們之前在編寫Dockerfile時,用VOLUME指令建立的tmp,此時進入容器內部就可以觀察到了。在tmp裡,果然發現了SpringBoot在執行過程中,其內建的Tomcat例項執行時工作目錄下生成的資料。

一步步把一個SpringBoot應用打包成Docker映象並執行


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2675744/,如需轉載,請註明出處,否則將追究法律責任。

相關文章