1. 程式人生 > 其它 >Doker部署springBoot專案

Doker部署springBoot專案

今天我們分享一個小知識點——docker部署springboot專案,之所以說它是個小知識點,是因為內容不多,而且也很簡單,內容主要包含兩個方面,一個是基於docker構建springboot專案的映象,一個就是用docker啟動我們的springboot專案映象。

編寫Dockerfile檔案

首先,我們要編寫這樣一份Dockfile,檔名就就是Dockerfile,沒有後綴名,這個檔案在專案的根目錄下,可以先看我的專案結構:

然後在Dockerfile中寫入如下內容,專案不同,配置有所不同,可根據自己的需要進行修改:

# Docker image for springboot file run
# VERSION 0.0.1
# Author: eangulee
# 基礎映象使用java
FROM java:8
# 作者
MAINTAINER syske <[email protected]>
# VOLUME 指定了臨時檔案目錄為/tmp。
# 其效果是在主機 /var/lib/docker 目錄下建立了一個臨時檔案,並連結到容器的/tmp
VOLUME /tmp 
# 將jar包新增到容器中並更名為springboot-learning.jar
ADD target/springboot-learning-0.0.1-SNAPSHOT.jar /springboot-learning.jar 
# 執行jar包
RUN bash -c 'touch /springboot-learning.jar'
ENV TZ 'Asia/Shanghai'
EXPOSE 8089
ENTRYPOINT ["java","-jar","/springboot-learning.jar"]

這裡簡單介紹下這個檔案的結構。

FROM的作用是指定專案的執行環境,這裡我們指定的是java8;

VOLUME 指定了臨時檔案目錄為/tmp。其效果是在主機 /var/lib/docker 目錄下建立了一個臨時檔案,並連結到容器的/tmp。該步驟是可選的,如果涉及到檔案系統的應用就很有必要了。

/tmp目錄用來持久化到 Docker 資料資料夾,因為 Spring Boot 使用的內嵌 Tomcat 容器預設使用/tmp作為工作目錄
專案的 jar 檔案作為 springboot-learning.jar新增到容器的
ENTRYPOINT 執行專案 springboot-learning.jar。為了縮短 Tomcat

啟動時間,新增一個系統屬性指向 /dev/./urandom作為 Entropy Source

ADD就是將我們編譯的jar檔案新增到容器中,這裡可以知道加入容器的檔名;

RUN bash -c就是執行shell命令;

ENV作用是這是環境變數,這裡設定的是時區;

EXPOSE的作用是指定容器執行埠;

ENTRYPOINT的作用是指定容器執行命令,指定之後,容器執行的時候就會執行我們指定的命令;

關於Dockerfile編寫,可以參考菜鳥教程:

https://www.runoob.com/docker/docker-dockerfile.html

專案打包

在編寫Dockerfile的時候,我們指定了jar

檔案的名字,所以在執行Dockerfil之前,我們要先打包好專案的jar檔案,確保Dockerfile中指定的jar檔案已經編譯好:

打包完成後,我們就可以製作我們的springboot專案的映象了。

製作映象

首先確保本地docker已經啟動,然後在專案根目錄,即Dockerfile所在目錄

執行如下命令:

docker build -t springboot-learning:v1 .

-t 引數是指定此映象的tag名,一般通常就是專案名:版本號。注意最後面的.,不要忘記了。

如果有如下提示,則表面springboot專案的映象構建完成,如果你是第一次構建,要拉取java8的映象,所以時間可能會比較長:

然後我們可以通過下面的命令檢視本地映象:

docker images

其中就有我們剛剛構建完成的映象:

啟動springboot映象

啟動我們構建的映象與啟動其他映象沒有本質區別,只是我們在指定埠的時候,容器的埠就是我們前面構建時指定的埠:

docker run --rm --name springboot-learning -p 8089:8089 springboot-learning:v1

另外這裡的映象版本號,也要和構建檔案保持一致。回車之後,你就會看到熟悉的springboot啟動日誌資訊:

這裡我為了方便檢視,沒有加-d(後臺執行),所以你ctrl+c後,容器會自動停止,一般我們線上執行都是後臺執行的。

測試

我的專案中有測試的controller,我們瀏覽器訪問下看看:

和我們直接在本地java -jar啟動一樣,沒有任何區別。

最後,簡單總結下,最近一段時間,我們分享了很多雲生態相關的知識,包括dokcerk8s等比較主流的技術,讓包括我在內的各位小夥伴對java雲生態有了一些初步的認識和了解。

然後再加上我們今天分享的springboot專案映象構建,現在這一連串的技術已經差不多全都被我們串起來了,可以這樣說,如果這些知識你自己都有動手做過,都有實踐過,那你對目前主流的雲生態應該已經有了最基本的認知,至少在使用和應用方面沒有太多的問題。
後面我們再分享下kuboard的用法,我們的springboot專案就可以執行在k8s中了,然後剩下的更細節的知識點就靠各位小夥伴自己去探索學習了。好了,今天的內容就到這裡了。