1. 程式人生 > >Spring Cloud的Docker映象構建與部署

Spring Cloud的Docker映象構建與部署

一、簡介

spring cloud是現在很火的一個微服務架構,是spring團隊推出一個微服務開發的生態體系,而docker是一個開源的容器引擎,使用docker可以更快更好的部署應用程式,本文主要講述如何在spring cloud下構建docker映象和使用docker去部署微服務。

二、構建Dockfile和spring cloud的配置

spring cloud在docker環境下的配置檔案部分示例圖如下所示

以上配置屬於springcloud一些核心配置,為什麼這種方式去寫配置檔案(${SERVER_IP}

)而不是通過${spring.cloud.client.ipAddress}這種方式去註冊服務呢?原因在於如果通過${spring.cloud.client.ipAddress}這種方式去註冊,會提交的是docker執行容器內部的ip地址,會導致服務不可用,而如果在配置寫死的話會失去靈活性,如果要切換伺服器去部署需要重新去修改配置檔案去打包部署。而${SERVER_IP}這種方式是讀的當前環境下引數,我們可以通過Docker file和docker run新增引數來賦值從而達到靈活性。

Dockerfile示例圖如下所示

其中ENV中的變數可以被內部程式讀取,我們可以通過docker run -e的方式來設定從而達到靈活性(文章後面將有啟動指令碼例項圖),例如spring cloud的配置檔案application.yml,也可以通過docker run來設定,cmd為程式啟動指令,為什麼要設定user.timezone是因為程式內部可能會讀取當前時間(例如日誌的輸出時間),docker內部的預設時區不是我們當前的北京時間,可以通過示例圖-Duser.timezone=GMT+08來設定時區。為什麼要設定-Xms500m -Xmx1500m?這兩個引數是用來指定jvm 執行jar的最小和最大記憶體大小,通過docker的預設方式的啟動jar,他會使用宿主機的記憶體,如果宿主機記憶體很大,可能會很少觸發垃圾回收,導致佔用大量記憶體。

三、通過maven外掛構建映象

pom檔案相關配置示例圖如下所示

因為maven命令的格式為mvn phase:goal,通過上圖配置執行時則為 mvn package docker:build,圖中${}變數需要自己去配置(外掛版本號以及harbor的相關配置引數)。

四、啟動指令碼示例

啟動指令碼例項圖如下所示

通過docker run -p去對映宿主機和容器內部的埠,通過-e 的方式來設定環境變數給容器內部使用,這樣可以達到靈活部署的目的。

微信訂閱號: