Docker學習筆記之在開發環境中使用服務發現

2022-05-09 22:56:28 字數 2752 閱讀 6687

服務發現應用是很多服務化系統的組成部分,所以在開發、測試環境中也就有必要配備一套服務發現體系來配合我們的開發、測試工作。在這一小節裡,我們就來談談如何在 docker 環境下部署服務發現應用。

實現服務發現的方法有很多種,其中較為常見的一種是利用分布式註冊中心,解決服務之間協調的問題。

在眾多註冊中心應用中,zookeeper 是較為常見和常用的一款程式,這裡我們就以 zookeeper 為例,介紹如何使用 docker 搭建 zookeeper 的執行環境。

由於 zookeeper 的執行並不需要太多的關注配置和調整,這裡我們就以最基礎的形式來設計 docker compose 專案的結構。

└─ project

├─ bin

│ └─ compose.

sh└─ compose

└─ docker-compose.yml

為了方便日常操作,我們依然編寫了 compose.sh 這個指令碼來輔助我們控制 docker compose 專案。

很多讀者會問到乙個問題,怎麼樣才能通過 docker 的虛擬化技術實現在乙個機器上模擬出多台機器的效果。或者說乙個我們這裡會涉及的具體問題,如何只用乙個 docker 來模擬乙個高可用的 zookeeper 集群。

我們知道,要實現 zookeeper 的高可用,至少需要三個 zookeeper 節點進行協作,所以這裡我們用三個單獨的 docker compose 服務定義來分別定義這三個節點。

version: '3'

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

在這個 docker compose 專案中,我們定義的三個 zookeeper 服務都直接使用了官方製作的 zookeeper 映象。

在這個映象裡,我們可以留意定製 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...