docker部署微服務(wù) 部署一個(gè)web程序是用多個(gè)docker互聯(lián)還是用一個(gè)docker直接全裝進(jìn)去好呢?為什么?
部署一個(gè)web程序是用多個(gè)docker互聯(lián)還是用一個(gè)docker直接全裝進(jìn)去好呢?為什么?開發(fā)一個(gè)Web站點(diǎn),是使用一個(gè)Docker還是多個(gè)Docker,要看這個(gè)Web項(xiàng)目的定位及未來發(fā)展。如果它只是
部署一個(gè)web程序是用多個(gè)docker互聯(lián)還是用一個(gè)docker直接全裝進(jìn)去好呢?為什么?
開發(fā)一個(gè)Web站點(diǎn),是使用一個(gè)Docker還是多個(gè)Docker,要看這個(gè)Web項(xiàng)目的定位及未來發(fā)展。如果它只是用來搭建一個(gè)小項(xiàng)目,而且該項(xiàng)目不需要經(jīng)常變動(dòng)的話,那使用一個(gè)Docker就好了。畢竟使用多個(gè)Docker,前期搭建復(fù)雜,后期維護(hù)也麻煩。
但是如果你想要它后期易于擴(kuò)展,便于擴(kuò)大規(guī)模,那你最好使用多個(gè)Docker,將數(shù)據(jù)庫服務(wù)、代碼服務(wù)、緩存服務(wù)等服務(wù)獨(dú)立開來,這樣當(dāng)你想要對某一服務(wù)進(jìn)行擴(kuò)展時(shí),只需要對這一服務(wù)進(jìn)行操作就好,而不會(huì)影響其他服務(wù)。
那如果使用多個(gè)Docker,多個(gè)Docker之間如何通訊呢?
要想將多個(gè)Docker鏈接起來,常用的方法有兩種,一種是使用—link命令,一種是直接使用IP地址。
如何使用docker部署iis?
Docker服務(wù)可以以端口的方式映射到主機(jī)上,比如 `docker run xxx --p:8000:8000`。
此時(shí)Docker宿主機(jī)可以通過8000端口訪問Docker中的web服務(wù)。
內(nèi)網(wǎng)另一臺機(jī)直接訪問宿主機(jī)ip:8000即可
微服務(wù)在Docker k8s下如何部署?
正好最近在項(xiàng)目中用到了這些技術(shù),我來拋磚引玉吧。
首先說結(jié)論:
1. k8s 是非常好的一項(xiàng)技術(shù),很穩(wěn)定。如果發(fā)現(xiàn)正在運(yùn)行的 pod 的數(shù)量不等于用戶設(shè)定的期望值, k8s 則會(huì)自動(dòng)創(chuàng)建或者刪除 pod,直到兩者相等。這樣既保障了服務(wù)的不間斷運(yùn)行,同時(shí)還可以動(dòng)態(tài)縮放服務(wù)的規(guī)格。用戶只要調(diào)整 pod 的 replicate 的數(shù)量即可,其他的都交給 k8s 就好,非常省心。
2. 要用 jenkins 來集成命令行操作,雖然我個(gè)人非常偏愛使用命令行,但是我不得不承認(rèn)用 jenkins 集成命令行操作會(huì)極大的提升工作效率。
下面說實(shí)現(xiàn)步驟:(本文以 azure 平臺為例)
1. 編寫 Dockerfile
2. 在 jenkins 創(chuàng)建任務(wù),并執(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 的時(shí)候需要編寫 yaml 格式的配置文件, deployment 配置包括 名稱,鏡像文件地址, cpu 最大最小分配值,內(nèi)存最大最小分配值等。service 配置文件包括 名稱,引用的 deployment 名稱,以及是否使用 load balancer等。
更多詳細(xì)信息可以參考我的 wiki. https://github.com/FamingHou/MyWiki