不知道各位小夥伴在生產環境都是怎麼部署 Spring Boot 的,打成 jar 直接一鍵運行?打成 war 扔到 Tomcat 容器中運行?不過據鬆哥瞭解,容器化部署應該是目前的主流方案。java
不一樣於傳統的單體應用,微服務因爲服務數量衆多,在部署的時候出問題的可能性更大,這個時候,結合 Docker 來部署,就能夠很好的解決這個問題,這也是目前使用較多的方案之一。git
將 Spring Boot 項目打包到 Docker 容器中部署,有不少不一樣的方法,今天鬆哥主要來和你們聊一聊如何將 Spring Boot 項目一鍵打包到遠程 Docker 容器,而後經過運行一個鏡像的方式來啓動一個 Spring Boot 項目。github
至於其餘的 Spring Boot 結合 Docker 的用法,你們不要着急,後續的文章,鬆哥會和你們慢慢的一一道來。web
我這裏以 CentOS7 爲例來給你們演示。spring
首先須要在 CentOS7 上安裝好 Docker,這個安裝方式網上不少,我就很少說了,我本身去年寫過一個 Docker 入門教程,你們能夠在公衆號後臺回覆 Docker
獲取教程下載地址。docker
Docker 安裝成功以後,咱們首先須要修改 Docker 配置,開啓容許遠程訪問 Docker 的功能,開啓方式很簡單,修改 /usr/lib/systemd/system/docker.service
文件,加入以下內容:瀏覽器
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
以下圖:服務器
配置完成後,保存退出,而後重啓 Docker:app
systemctl daemon-reload service docker restart
Docker 重啓成功以後,Docker 的準備工做就算是 OK 了。maven
IDEA 上的準備工做,主要是安裝一個 Docker 插件,點擊 File->Settings->Plugins->Browse Repositories
以下:
點擊右邊綠色的 Install 按鈕,完成安裝,安裝完成以後須要重啓一下 IDEA。
IDEA 重啓成功以後,咱們依次打開 File->Settings->Build,Execution,Deployment->Docker
,而後配置一下 Docker 的遠程鏈接地址:
配置一下 Docker 的地址,配置完成後,能夠看到下面有一個 Connection successful 提示,這個表示 Docker 已經鏈接上了。
如此以後,咱們的準備工做就算是 OK 了。
接下來咱們來建立一個簡單的 Spring Boot 項目(只須要引入 spring-boot-starter-web
依賴便可),項目建立成功以後,咱們再建立一個普通的 HelloDockerController
,用來作測試,以下:
@RestController public class HelloDockerController { @GetMapping("/hello") public String hello() { return "hello docker!"; } }
這是一個很簡單的接口,無需多說。
接下來,在項目的根目錄下,我建立一個 Dockerfile ,做爲我鏡像的構建文件,具體位置以下圖:
文件內容以下:
FROM hub.c.163.com/library/java:latest VOLUME /tmp ADD target/docker-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
這裏只有簡單的四行,我說一下:
這是咱們配置的一個簡單的 Dockerfile。
接下來在 pom.xml 文件中,添加以下插件:
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.0</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <dockerHost>http://192.168.66.131:2375</dockerHost> <imageName>javaboy/${project.artifactId}</imageName> <imageTags> <imageTag>${project.version}</imageTag> </imageTags> <forceTags>true</forceTags> <dockerDirectory>${project.basedir}</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
這個插件的配置不難理解:
OK,作完這些咱們就算大功告成了。
接下來對項目進行打包,打包完成後,項目會自動構建成一個鏡像,而且上傳到 Docker 容器中,打包方式以下:
打包過程會稍微有一點舊,由於還包含了鏡像的構建,特別是第一次打包,須要下載基礎鏡像,會更慢一些。
部分打包日誌以下(項目構建過程):
項目打包成功以後,咱們就能夠在 Docker 容器中看到咱們剛剛打包成的鏡像了,以下:
此時,咱們能夠直接在 Linux 上像建立普通容器同樣建立這個鏡像的容器,而後啓動,執行以下命令便可:
docker run -d --name javaboy -p 8080:8080 javaboy/docker:0.0.1
啓動成功以後,咱們就能夠訪問容器中的接口了。
可是這種操做顯然仍是有點麻煩,結合咱們一開始安裝的 Docker 插件,這個運行步驟還能夠作進一步的簡化。
你們注意,此時咱們的 IDEA 中多了一個選項,就是 docker,以下:
點擊左邊的綠色啓動按鈕,鏈接上 Docker 容器,鏈接成功以後,咱們就能夠看到目前 Docker 中的全部容器和鏡像了,固然也包括咱們剛剛建立的 Docker 鏡像,以下:
此時,咱們選中這個鏡像,右鍵單擊,便可基於此鏡像建立出一個容器,以下圖:
咱們選擇 Create container,而後填入容器的一些必要信息,配置一下容器名稱,鏡像 ID 會自動填上,暴露的端口使用 Specify 便可,而後寫上端口的映射關係:
配置完成後,點擊下方的 run
按鈕,就能夠開始運行了。運行日誌以下:
注意,這個日誌是在 Docker 的那個窗口裏打印出來的。
項目運行成功以後,在瀏覽器輸入遠程服務器的地址,就能夠訪問了:
如此以後,咱們的 Spring Boot 項目就算順利發佈到遠程 Docker 容器中了。
好玩嗎?試試!
本文案例我已經上傳到 GitHub,小夥伴們能夠參考:https://github.com/lenve/java...