单台服务器利用 docker 进行 etcd 集群部署
使用的镜像,这个镜像很小(只有几 MB),带有一个极简的 Linux 工具集。此方法可以不需安装 docker-compose。这表示新建的 busybox 容器不会用自己的网络栈,而是。(interactive)保持 STDIN 打开,允许交互。容器启动后执行的命令。→ 两个结合起来,就是我们常见的。退出时自动删除这个容器(不留垃圾)。,看到的就是 etcd 容器的 IP。镜像是一个极简容器镜像
一. 环境准备
-
root@VM-12-11-ubuntu:~# cat /etc/lsb-release # DISTRIB_ID=Ubuntu # DISTRIB_RELEASE=24.04 # DISTRIB_CODENAME=noble # DISTRIB_DESCRIPTION="Ubuntu 24.04 LTS" - 安装 docker-ce 以及 docker-compose, 参考此文Ubuntu 24.04 LTS 部署 docker 过程记录-CSDN博客
- 拉取官方 etcd 镜像:
docker pull quay.io/coreos/etcd:v3.5.16
二. 单机部署 etcd 集群 (3 节点)
以下两个方法均可。
方法一:
# 创建网络
docker network create etcd-net
# 启动 etcd0
docker run -d --name etcd0 --net etcd-net \
-p 2379:2379 -p 2380:2380 \
quay.io/coreos/etcd:v3.5.16 \
etcd --name etcd0 \
--initial-advertise-peer-urls http://etcd0:2380 \
--listen-peer-urls http://0.0.0.0:2380 \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://etcd0:2379 \
--initial-cluster-token etcd-cluster-1 \
--initial-cluster etcd0=http://etcd0:2380,etcd1=http://etcd1:2380,etcd2=http://etcd2:2380 \
--initial-cluster-state new
# 启动 etcd1
docker run -d --name etcd1 --net etcd-net \
quay.io/coreos/etcd:v3.5.16 \
etcd --name etcd1 \
--initial-advertise-peer-urls http://etcd1:2380 \
--listen-peer-urls http://0.0.0.0:2380 \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://etcd1:2379 \
--initial-cluster-token etcd-cluster-1 \
--initial-cluster etcd0=http://etcd0:2380,etcd1=http://etcd1:2380,etcd2=http://etcd2:2380 \
--initial-cluster-state new
# 启动 etcd2
docker run -d --name etcd2 --net etcd-net \
quay.io/coreos/etcd:v3.5.16 \
etcd --name etcd2 \
--initial-advertise-peer-urls http://etcd2:2380 \
--listen-peer-urls http://0.0.0.0:2380 \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://etcd2:2379 \
--initial-cluster-token etcd-cluster-1 \
--initial-cluster etcd0=http://etcd0:2380,etcd1=http://etcd1:2380,etcd2=http://etcd2:2380 \
--initial-cluster-state new
此方法可以不需安装 docker-compose。
方法二:
docker-compose.yml
version: '3'
services:
etcd0:
image: quay.io/coreos/etcd:v3.5.16
container_name: etcd0
command: >
etcd --name etcd0
--initial-advertise-peer-urls http://etcd0:2380
--listen-peer-urls http://0.0.0.0:2380
--listen-client-urls http://0.0.0.0:2379
--advertise-client-urls http://etcd0:2379
--initial-cluster-token etcd-cluster-1
--initial-cluster etcd0=http://etcd0:2380,etcd1=http://etcd1:2380,etcd2=http://etcd2:2380
--initial-cluster-state new
networks:
- etcd-net
ports:
- "2379:2379"
- "2380:2380"
etcd1:
image: quay.io/coreos/etcd:v3.5.16
container_name: etcd1
command: >
etcd --name etcd1
--initial-advertise-peer-urls http://etcd1:2380
--listen-peer-urls http://0.0.0.0:2380
--listen-client-urls http://0.0.0.0:2379
--advertise-client-urls http://etcd1:2379
--initial-cluster-token etcd-cluster-1
--initial-cluster etcd0=http://etcd0:2380,etcd1=http://etcd1:2380,etcd2=http://etcd2:2380
--initial-cluster-state new
networks:
- etcd-net
etcd2:
image: quay.io/coreos/etcd:v3.5.16
container_name: etcd2
command: >
etcd --name etcd2
--initial-advertise-peer-urls http://etcd2:2380
--listen-peer-urls http://0.0.0.0:2380
--listen-client-urls http://0.0.0.0:2379
--advertise-client-urls http://etcd2:2379
--initial-cluster-token etcd-cluster-1
--initial-cluster etcd0=http://etcd0:2380,etcd1=http://etcd1:2380,etcd2=http://etcd2:2380
--initial-cluster-state new
networks:
- etcd-net
networks:
etcd-net:
driver: bridge
启动
docker-compose up -d
三. 验证集群角色
docker exec -it etcd0 etcdctl --endpoints=http://etcd0:2379,http://etcd1:2379,http://etcd2:2379 endpoint status --write-out=table

四. 功能验证(写入/读取)
# 写入
docker exec -it etcd0 etcdctl \
--endpoints=http://etcd0:2379,http://etcd1:2379,http://etcd2:2379 \
put foo bar
# 读取
docker exec -it etcd1 etcdctl \
--endpoints=http://etcd0:2379,http://etcd1:2379,http://etcd2:2379 \
get foo

五. 涉及到的其他内容
- 使用
docker info查看 Registry/Mirror
docker info | grep "Registry" -C 3

- 如何查看
etcd-net是否创建成功
docker network ls

- 进入容器内执行网络命令
···官方的 quay.io/coreos/etcd 镜像是一个极简容器镜像,没有安装 bash,
#进入 容器内命令行界面
docker run -it --rm --net=container:00df7fd11ea1 busybox sh
-
docker run
启动一个新的容器。 -
-it-
-i(interactive)保持 STDIN 打开,允许交互。 -
-t(tty)分配一个伪终端。
→ 两个结合起来,就是我们常见的 交互式 shell 终端。
-
-
--rm
退出时自动删除这个容器(不留垃圾)。 -
--net=container:00df7fd11ea1
关键点 ⚡
这表示新建的 busybox 容器不会用自己的网络栈,而是 直接加入到 ID 为00df7fd11ea1的容器的网络命名空间。
所以新容器和 etcd 容器 共享同一个网络(IP、端口、路由、接口都一样)。-
举个例子:在 busybox 容器里执行
ip addr,看到的就是 etcd 容器的 IP。
-
-
busybox
使用的镜像,这个镜像很小(只有几 MB),带有一个极简的 Linux 工具集。 -
sh
容器启动后执行的命令。这里是调用 busybox 自带的/bin/sh,进入交互式 shell - 只执行命令,不进入交互式 shell
docker exec -it 00df7fd11ea1 etcd --version
docker exec -it 00df7fd11ea1 etcdctl member list
docker exec -it 00df7fd11ea1 etcdctl endpoint health
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)