微服務和docker的關系 微服務在Docker k8s下如何部署?
微服務在Docker k8s下如何部署?正好最近在項目中用到了這些技術,我來拋磚引玉吧。首先說結論:1. k8s 是非常好的一項技術,很穩(wěn)定。如果發(fā)現(xiàn)正在運行的 pod 的數(shù)量不等于用戶設定的期望值,
微服務在Docker k8s下如何部署?
正好最近在項目中用到了這些技術,我來拋磚引玉吧。
首先說結論:
1. k8s 是非常好的一項技術,很穩(wěn)定。如果發(fā)現(xiàn)正在運行的 pod 的數(shù)量不等于用戶設定的期望值, k8s 則會自動創(chuàng)建或者刪除 pod,直到兩者相等。這樣既保障了服務的不間斷運行,同時還可以動態(tài)縮放服務的規(guī)格。用戶只要調(diào)整 pod 的 replicate 的數(shù)量即可,其他的都交給 k8s 就好,非常省心。
2. 要用 jenkins 來集成命令行操作,雖然我個人非常偏愛使用命令行,但是我不得不承認用 jenkins 集成命令行操作會極大的提升工作效率。
下面說實現(xiàn)步驟:(本文以 azure 平臺為例)
1. 編寫 Dockerfile
2. 在 jenkins 創(chuàng)建任務,并執(zhí)行包含如下命令的腳本
2.1 git pull 源代碼到本地
2.2 docker build 命令生成鏡像文件
2.3 docker 定義鏡像文件版本號并上傳到 azure 平臺
2.4 kubectl 命令來創(chuàng)建 k8s 的 deployment & service.
2.5 每次版本更新可以調(diào)用 update image 來編譯新的鏡像版本并提供給 k8s 使用
注意在創(chuàng)建 k8s 的 deployment 和 service 的時候需要編寫 yaml 格式的配置文件, deployment 配置包括 名稱,鏡像文件地址, cpu 最大最小分配值,內(nèi)存最大最小分配值等。service 配置文件包括 名稱,引用的 deployment 名稱,以及是否使用 load balancer等。
更多詳細信息可以參考我的 wiki. https://github.com/FamingHou/MyWiki
如何使用Java和Docker構建微服務?
在Java生態(tài)中,構建微服務的策略包括Container-less,Self-contained,以及In-container等。Container-less微服務將應用及其依賴打包成一個單一的jar文件。Self-contained微服務也是打包成一個單一的Jar文件,但它還包括一個嵌入式框架,這個框架含有可選的第三方lib,當然這些lib是兼容的。In-container微服務打包成一個完整的Java EE容器,該服務在Docker鏡像中實現(xiàn)。 基于微服務的架構給架構師和開發(fā)者帶來了新的挑戰(zhàn),然而,隨著語言的升級和工具數(shù)量的增加,開發(fā)者和架構師完全有能力應對這樣的挑戰(zhàn)。Java也不例外,本文探討了在Java生態(tài)系統(tǒng)內(nèi)構建微服務的不同方法。
部署一個web程序是用多個docker互聯(lián)還是用一個docker直接全裝進去好呢?為什么?
開發(fā)一個Web站點,是使用一個Docker還是多個Docker,要看這個Web項目的定位及未來發(fā)展。如果它只是用來搭建一個小項目,而且該項目不需要經(jīng)常變動的話,那使用一個Docker就好了。畢竟使用多個Docker,前期搭建復雜,后期維護也麻煩。
但是如果你想要它后期易于擴展,便于擴大規(guī)模,那你最好使用多個Docker,將數(shù)據(jù)庫服務、代碼服務、緩存服務等服務獨立開來,這樣當你想要對某一服務進行擴展時,只需要對這一服務進行操作就好,而不會影響其他服務。
那如果使用多個Docker,多個Docker之間如何通訊呢?
要想將多個Docker鏈接起來,常用的方法有兩種,一種是使用—link命令,一種是直接使用IP地址。
docker大家用到什么程度了?
生產(chǎn)環(huán)境docker 容器實例上萬個,持續(xù)集成,持續(xù)測試,持續(xù)發(fā)布,服務編排均基于docker