服務發現應用是很多服務化系統的組成部分,所以在開發、測試環境中也就有必要配備一套服務發現體系來配合我們的開發、測試工作。在這一小節裡,我們就來談談如何在 docker 環境下部署服務發現應用。
實現服務發現的方法有很多種,其中較為常見的一種是利用分布式註冊中心,解決服務之間協調的問題。
在眾多註冊中心應用中,zookeeper 是較為常見和常用的一款程式,這裡我們就以 zookeeper 為例,介紹如何使用 docker 搭建 zookeeper 的執行環境。
由於 zookeeper 的執行並不需要太多的關注配置和調整,這裡我們就以最基礎的形式來設計 docker compose 專案的結構。
└─ project為了方便日常操作,我們依然編寫了 compose.sh 這個指令碼來輔助我們控制 docker compose 專案。├─ bin
│ └─ compose.
sh└─ compose
└─ docker-compose.yml
很多讀者會問到乙個問題,怎麼樣才能通過 docker 的虛擬化技術實現在乙個機器上模擬出多台機器的效果。或者說乙個我們這裡會涉及的具體問題,如何只用乙個 docker 來模擬乙個高可用的 zookeeper 集群。
我們知道,要實現 zookeeper 的高可用,至少需要三個 zookeeper 節點進行協作,所以這裡我們用三個單獨的 docker compose 服務定義來分別定義這三個節點。
version: '3'在這個 docker compose 專案中,我們定義的三個 zookeeper 服務都直接使用了官方製作的 zookeeper 映象。services:
zk1:
image: zookeeper:
3.4restart: always
hostname
: zk1
environment:
zoo_my_id:
1zoo_servers: server.
1=0.0.0.0:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888
ports:
- 2181:2181
zk2:
image: zookeeper:
3.4restart: always
hostname
: zk2
environment:
zoo_my_id:
2zoo_servers: server.
1=zk1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zk3:2888:3888
ports:
- 2182:2181
zk3:
image: zookeeper:
3.4restart: always
hostname
: zk3
environment:
zoo_my_id:
3zoo_servers: server.
1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=0.0.0.0:2888:3888
ports:
- 2183:2181
在這個映象裡,我們可以留意定製 zoo_my_id 和 zoo_servers 這兩個環境變數。這兩個變數主要是用來識別 zookeeper 集群中不同 zookeeper 程式的。
其中 zoo_my_id 是 zookeeper 在集群中的編號,而 zoo_servers 用來定義集群中的所有 zookeeper 及它們的連線方式。
我們以 zk1 這個服務為例來解釋一下 zoo_servers 的定義方法。
server.1=0.0.0.0:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888我們可以在 zoo_servers 中定義所有處於 zookeeper 集群中的程式,通過空格來間隔它們。而每個服務的的定義形式為
server.[id]=[host]:[port]:[port]
,所以就有了上面例子中我們看到的樣子。
在這個例子裡,我們描述了三個 zookeeper 程式的連線位址。
由於每個容器都有獨立的埠表,所以即使這些程式都執行在乙個主機裡,我們依然不需要擔心,它們會造成埠的衝突。所以這裡我們直接使用預設的 2888 和 3888 來進行服務間的相互通訊即可。
而在進行容器互聯的過程中,我們可以通過 docker 的解析機制,直接填入對應服務的名稱替代它們的 ip 位址,也就是這個例子裡的 zk2 和 zk3。
在專案定義中,我們還注意到了restart: always
這個配置,這個配置主要是用來控制容器的重啟策略的。
這裡的 always 指的是不論任何情況,容器出現問題後都會自動重啟,也包括 docker 服務本身在啟動後容器也會自動啟動。
另外,restart 還支援幾種配置:
在實際使用中,我們可以根據需要選擇不同的重啟策略。
而這個專案裡,我們希望 zookeeper 能夠一直健壯的執行,所以使用了 always 這個重啟策略。
一切就緒,我們就可以直接通過 docker compose 的命令來啟動開發環境了
# ./bin/compose.sh up -d
Silverlight 2 0學習筆記 開發環境
對於silverlight的程式設計,實際上乙個文字編輯器就可以滿足要求了,但是使用真實的開發環境是可以大幅提高生產率的,目前最好的選擇是微軟提供的開發工具,visual studio 2008和免費的visual web developer express edition都可以滿足開發要求,但是使...
Silverlight 2 0學習筆記 開發環境
對於silverlight的程式設計,實際上乙個文字編輯器就可以滿足要求了,但是使用真實的開發環境是可以大幅提高生產率的,目前最好的選擇是微軟提供的開發工具,visual studio 2008和免費的visual web developer express edition都可以滿足開發要求,但是使...
使用Docker構建PyCharm開發環境
總結最近想用python開發乙個防火牆安全策略管理的軟體,如果直接安裝pycharm的開發環境,導致自己筆記本安裝的東西越來越多,造成混亂,因此花了幾天的時間構建了乙個pycharm的開發環境docker映象!1 我使用的作業系統為win10,已經安裝了docker for windows。現在do...