Docker 打包 部署
一貫的開場白,大家好:
開始學習Spring Boot ,同時也再學習 Maven 自動化構建。 項目的部署環境是 Linux 服務器,Docker容器。
之所以寫這篇博客,是因為我在Dcoker 部署中遇到了一些問題,因為也是初學,請教了一些同事。在問題解決后,我又按照回憶,接着從頭開始了一遍,加深了一些映像。希望這篇高博客也能對大家又一定如幫助。
溫馨提示:如果 百度爛了都查不出你想要的結果的話,多半是你該去相關的官方站點看資料了,比如 spring, 它的官網文檔還是很棒的(最少大家都這么說)。
開始今天的正題,倆個假設:
(1).此刻我假設你已經把你的 通過 maven 自動化構建的 java demo 打包了,就是說生成了以 jar 或者 war 結尾的包文件了。
(2).假設你已經成功安裝 docker 。
如果上面的倆個假設為True的話,那您可以接着往下看。
Docker相關術語:
(1).鏡像、容器、倉庫
Docker的特點:
(1).關鍵字:集裝箱、標准、隔離。
Docker的部署實踐:
1.創建dockerfile
注意我提到的假設:你的jar包或者war包都已經打包成功,並且docker安裝成功。
dockerfile 的內容如下:
FROM azul/zulu-openjdk:8 VOLUME /home/work/springDemo ADD springDemo-0.0.1-SNAPSHOT.jar app.jar RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
FROM:基於哪個鏡像
VOLUME:可以將本地文件夾或者其他container的文件夾掛載到container中
ADD:將文件<src>拷貝到container的文件系統對應的路徑<dest>
RUN:RUN命令將在當前image中執行任意合法命令並提交執行結果。命令執行提交后,就會自動執行Dockerfile中的下一個指令
ENTRYPOINT:container啟動時執行的命令,但是一個Dockerfile中只能有一條ENTRYPOINT命令,如果多條,則只執行最后一條
關於Dockerfile的介紹,可以查看:
https://www.dwhd.org/20151202_113538.html?lan=cn&lan=cn
重點:dockerfile 和 jar包或者war包的位置

注意:新創建的 Dockerfile 文件需要和 jar 的在一個文件夾下。
2.Jar包的生成
大家看到上圖中的.jar 的包可能會有困惑,這個包是怎么生成的呢?下面我們來看看這個包是如何生成的。
由於我是通過maven的方式來構建項目的,所以也是通過maven的方式來的build的,當然前提依然是你的環境中安裝了 maven,具體操作我們來看看截圖。
經過上面的操作后,就build 好了 jar包。 (花絮:你們知道一個用慣了windows 的人截這張圖付出了多么大的代價嗎?)
3.生成鏡像
shell 命令說明:重點是你要 cd 到存放Dockerfile 和 jar包或者war包所在的文件夾下面。
命令:sudo docker build -t springbootdemo .
注意:命令后面的 . 要帶上 。
-t參數的含義我記不清了,你可以通過 sudo docker build --help 來查看相關函數的解釋。 springbootdemo是build的鏡像名稱。
以上操作完成了Docker 鏡像的創建。檢驗鏡像是否創建成功,命令: sudo docker images ,可以看到springbootdemo就是剛才創建的鏡像。
4.啟動容器
容器其實也相當與鏡像的載體。
容器的啟動命令截圖:

啟動命令:sudo docker run -d -p 8080:8080 springbootdemo
-d -p 的參數含義我也忘卻了,大家可以查查。 8080:8080是一個端口的映射,它的具體邏輯和原理,我建議大家學習Docker中仔細看看,springbootdemo 就是我上面提到的鏡像文件。
查看當前運行中的容器:sudo docker ps

5.驗證
驗證環節就可看看我們的 Demo是否部署成功了,如果你的jar包或者war包跟我以一樣,是web程序的話,就可以通過瀏覽器來測試。
sorry,我比較懶,我只在我的web Demo中寫了一個 alert。 這就是最終的效果。
好了,就寫到這了,如過大家對maven 自動話構建感興趣的話,給我留言,我會抽時間寫一篇針對maven構建的博客。我是百靈,如果文中有錯誤,歡迎大家指正。
