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
啟動一樣,沒有任何區別。
最後,簡單總結下,最近一段時間,我們分享了很多雲生態相關的知識,包括dokcer
、k8s
等比較主流的技術,讓包括我在內的各位小夥伴對java
雲生態有了一些初步的認識和了解。
然後再加上我們今天分享的springboot
專案映象構建,現在這一連串的技術已經差不多全都被我們串起來了,可以這樣說,如果這些知識你自己都有動手做過,都有實踐過,那你對目前主流的雲生態應該已經有了最基本的認知,至少在使用和應用方面沒有太多的問題。
後面我們再分享下kuboard
的用法,我們的springboot
專案就可以執行在k8s
中了,然後剩下的更細節的知識點就靠各位小夥伴自己去探索學習了。好了,今天的內容就到這裡了。