Docker化你的SpringBoot項目
本文默認讀者已經掌握docker的相關操作,如果你對docker相關的知識不熟悉,可以參考我容器/虛擬化
分類的文章,我這裏就不對其進行贅述了,地址如下:
http://blog.51cto.com/zero01/category27.html
一般我們會將docker鏡像存放在鏡像倉庫中,這樣方便於在其他機器上拉取鏡像。如果是個人使用的話,我們可以在網易雲上創建自己的鏡像倉庫,網易雲鏡像倉庫地址如下,需要註冊賬戶:
https://www.163yun.com/product/repo
賬戶註冊好後,我們來試著手動創建一個自己的鏡像倉庫:
填寫鏡像倉庫的相關信息:
創建完成:
不過我們一般不會手動去創建鏡像倉庫,而是在本地build好鏡像,然後推送到倉庫上。
關於推送本地鏡像到網易雲鏡像倉庫上的文檔地址如下,所以關於推送本地鏡像我就不過多贅述了:
https://www.163yun.com/help/documents/15587826830438400
接下來我們docker化自己的SpringBoot項目,我現在已經準備好了一個需要docker化部署的SpringBoot項目,項目根目錄如下:
為我們自己的項目制作鏡像時,需要基於一個系統鏡像,我們可以到網易雲的鏡像中心去獲取所需的系統鏡像,地址如下:
https://c.163yun.com/hub#/m/home/
我這裏使用的是alpine系統的鏡像,鏡像地址:hub.c.163.com/library/java:8-alpine
。
在項目的根目錄中,創建一個Dockerfile文件,編輯文件內容如下:
FROM hub.c.163.com/library/java:8-alpine MAINTAINER zeroJun [email protected] ADD target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"]
打開命令行終端進入到項目的根目錄下,並登錄你的網易雲鏡像倉庫賬戶:
docker login -u ${賬號} -p ${密碼} hub.c.163.com
然後編寫一個簡單的shell腳本來完成build及推送鏡像的工作:
[zero@localhost /work/superposition]# vim build_superposition.sh
#!/bin/bash
mvn clean package -Dmaven.test.skip=true
docker build -t hub.c.163.com/${倉庫名}/superposition .
docker push hub.c.163.com/${倉庫名}/superposition
[zero@localhost /work/superposition]#
註意,這裏是倉庫名,即賬號中類似於用戶名的字段,例如我的倉庫名是zerojun,所以腳本內容如下:
#!/bin/bash
mvn clean package -Dmaven.test.skip=true
docker build -t hub.c.163.com/zerojun/superposition .
docker push hub.c.163.com/zerojun/superposition
運行腳本:
[zero@localhost /work/superposition]# sh ./build_superposition.sh
腳本執行完成後,到鏡像倉庫上可以看到鏡像已經成功push上來了:
默認從本地push的鏡像都是私有的訪問權限,我們需要設置為公開的,否則無法被外部訪問:
當然,你也可以設置為私有的訪問權限,那樣拉取鏡像前,登錄你的倉庫賬號即可,我這裏為了方便演示就設置成功公開了。
點擊鏡像可以查看到鏡像倉庫詳情,復制鏡像的下載地址:
到服務器上,使用如下命令拉取這個鏡像:
[root@01server ~]# docker pull hub.c.163.com/zerojun/superposition:latest
使用如下命令,啟動該鏡像為運行中的容器:
[root@01server ~]# docker run -d -p 8080:8080 hub.c.163.com/zerojun/superposition:latest
運行成功後,通過post進行測試如下:
可以看到接口能夠正常訪問,如此一來,我們就成功docker化部署了一個SpringBoot項目。
Docker化你的SpringBoot項目