自行解決
在這以前我犯個了糊塗,由於我使用的是macos
系統,直接拷貝了本機的etcd
文件使用,而Docker
鏡像使用的是alpine
linux,致使個人Docker
一直啓動不起來,因此這裏要注意了。node
廢話少講,去github
下載對應的Etcd
文件
https://github.com/etcd-io/etcd/releaseslinux
解壓tar.gz
包拿到etcd
和etcdctl
這兩個文件,把這兩個文件放在某個目錄中,好比~/etcd
目錄中。git
cd ~/etcd touch Dockerfile
內容以下:github
FROM alpine ADD etcd /usr/local/bin/ ADD etcdctl /usr/local/bin/ RUN mkdir -p /var/etcd/ RUN mkdir -p /var/lib/etcd/ RUN echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf EXPOSE 2379 2380 CMD [ "/usr/local/bin/etcd" ]
我使用的etcd
版本號是3.4.4,因此我加了個tag給它,好方便之後區分。docker
docker build -t etcd:3.4.4 .
查看剛剛建立的鏡像shell
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE etcd 3.4.4 ca85f276bf1b 12 minutes ago 46.9MB
使用Docker Compose
建立
能夠靈活的在一臺服務器上部署1至N個Etcd
節點macos
建立3個容器json
~/etcd
下建立並編寫docker-compose.yml文件version: "3.7" services: etcd0: image: "etcd:3.4.4" container_name: etcd0 ports: - "23800:2380" - "23790:2379" environment: - ALLOW_NONE_AUTHENTICATION=yes - ETCD_NAME=etcd0 - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 - ETCD_ADVERTISE_CLIENT_URLS=http://192.168.3.19:23790 - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd0:2380 - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster - ETCD_INITIAL_CLUSTER=etcd0=http://etcd0:2380,etcd1=http://etcd1:2380,etcd2=http://etcd2:2380 - ETCD_INITIAL_CLUSTER_STATE=new etcd1: image: "etcd:3.4.4" container_name: etcd1 ports: - "23801:2380" - "23791:2379" environment: - ALLOW_NONE_AUTHENTICATION=yes - ETCD_NAME=etcd1 - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 - ETCD_ADVERTISE_CLIENT_URLS=http://192.168.3.19:23791 - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd1:2380 - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster - ETCD_INITIAL_CLUSTER=etcd0=http://etcd0:2380,etcd1=http://etcd1:2380,etcd2=http://etcd2:2380 - ETCD_INITIAL_CLUSTER_STATE=new etcd2: image: "etcd:3.4.4" container_name: etcd2 ports: - "23802:2380" - "23792:2379" environment: - ALLOW_NONE_AUTHENTICATION=yes - ETCD_NAME=etcd2 - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 - ETCD_ADVERTISE_CLIENT_URLS=http://192.168.3.19:23792 - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380 - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster - ETCD_INITIAL_CLUSTER=etcd0=http://etcd0:2380,etcd1=http://etcd1:2380,etcd2=http://etcd2:2380 - ETCD_INITIAL_CLUSTER_STATE=new
這裏192.168.3.19是我電腦的ip
建立並運行服務器
docker-compose up -d
--name 節點名稱 --data-dir 指定節點的數據存儲目錄 --listen-peer-urls 監聽URL,用於與其餘節點通信 --listen-client-urls 對外提供服務的地址:好比 http://ip:2379,http://127.0.0.1:2379 ,客戶端會鏈接到這裏和 etcd 交互 --initial-advertise-peer-urls 該節點同伴監聽地址,這個值會告訴集羣中其餘節點 --initial-cluster 集羣中全部節點的信息,格式爲 node1=http://ip1:2380,node2=http://ip2:2380,… 。注意:這裏的 node1 是節點的 --name 指定的名字;後面的 ip1:2380 是 --initial-advertise-peer-urls 指定的值 --initial-cluster-state 新建集羣的時候,這個值爲 new ;假如已經存在的集羣,這個值爲 existing --initial-cluster-token 建立集羣的 token,這個值每一個集羣保持惟一。這樣的話,若是你要從新建立集羣,即便配置和以前同樣,也會再次生成新的集羣和節點 uuid;不然會致使多個集羣之間的衝突,形成未知的錯誤 --advertise-client-urls 對外公告的該節點客戶端監聽地址,這個值會告訴集羣中其餘節點
在項目中使用時,只要把這三個IP地址加入就行tcp
//這僅是個舉例 "etcd": { "addrs": [ "192.168.3.19:23790", "192.168.3.19:23791", "192.168.3.19:23792" ] }
IP地址能夠根據須要選擇使用。
IP地址能夠是任何一種能夠訪問該端口的
好比本機運行ETCD集羣:localhost:23790
、127.0.0.1:23790
、192.168.3.19:23790
局域網其它電腦訪問用:192.168.3.19:23790
外網的用:123.123.123.123:23790
上面命令建立容器後會自動運行,如今來查看一下正在運行的容器。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 23118af323b7 etcd:3.4.4 "/usr/local/bin/etcd…" 14 minutes ago Up 14 minutes 0.0.0.0:23792->2379/tcp, 0.0.0.0:23802->2380/tcp etcd2 a56c474096b4 etcd:3.4.4 "/usr/local/bin/etcd…" 14 minutes ago Up 14 minutes 0.0.0.0:23791->2379/tcp, 0.0.0.0:23801->2380/tcp etcd1 0f69893b4461 etcd:3.4.4 "/usr/local/bin/etcd…" 14 minutes ago Up 14 minutes 0.0.0.0:23790->2379/tcp, 0.0.0.0:23800->2380/tcp etcd0
選擇並進入一個node,查看etcd
的運行狀況
docker exec -it a56c474096b4 /bin/sh
查看列表,看它們之間是否可以互相通訊
etcdctl member list
ok,沒問題
3afe939858b1b0d7, started, etcd1, http://etcd1:2380, http://192.168.3.19:23791, false 4491176acad620db, started, etcd0, http://etcd0:2380, http://192.168.3.19:23790, false 848e3e65e4ec6f12, started, etcd2, http://etcd2:2380, http://192.168.3.19:23792, false
這裏有個小問題,集羣沒有完成選舉,後續完善