通过 docker 使用 Etcd

我使用的 etcd 镜像版本是 quay.io/coreos/etcd:v3.5.5

拉取镜像

通过 docker pull 命令拉取 etcd 镜像

docker pull quay.io/coreos/etcd

该命令会从指定的镜像库(quay.io)拉取最新版本的 etcd 镜像。

可以使用 docker images​ 命令查看 etcd 镜像是否成功下载到本地

运行容器

  • 通过命令行运行

    docker run -d \ --name etcd-server \ -v /my/local/data:/etcd-data \ -p 2379:2379 \ -p 2380:2380 \ quay.io/coreos/etcd:latest \ etcd --name etcd-node1 \ --data-dir /etcd-data \ --advertise-client-urls http://192.168.1.100:2379 \ --listen-client-urls http://0.0.0.0:2379 \ --initial-advertise-peer-urls http://192.168.1.100:2380 \ --listen-peer-urls http://0.0.0.0:2380 \ --initial-cluster etcd-node1=http://192.168.1.100:2380

    参数解释

    1. Docker 参数:

      • --name etcd-server​:设置容器名称。
      • -v /my/local/data:/etcd-data​:将本地目录 /my/local/data​ 挂载到容器内的 /etcd-data​,用于持久化 etcd 数据。
      • -p 2379:2379​:将宿主机的 2379 端口映射到容器的 2379 端口,供客户端连接。
      • -p 2380:2380​:将宿主机的 2380 端口映射到容器的 2380 端口,用于 etcd 节点间的通信。
    2. etcd 参数:

      • --name etcd-node1​:设置 etcd 节点的名称为 etcd-node1​。
      • --data-dir /etcd-data​:指定 etcd 数据存储的目录为 /etcd-data​。
      • --advertise-client-urls http://192.168.1.100:2379​:声明该节点对外暴露的客户端访问地址(替换为实际宿主机 IP 地址 192.168.1.100​)。
      • --listen-client-urls http://0.0.0.0:2379​:设置 etcd 在容器内部监听客户端连接的地址,0.0.0.0​ 表示监听所有网络接口。
      • --initial-advertise-peer-urls http://192.168.1.100:2380​:声明该节点对外暴露的节点间通信地址(用于集群中的其他 etcd 节点与它通信)。
      • --listen-peer-urls http://0.0.0.0:2380​:设置 etcd 在容器内部监听节点间通信的地址。
      • --initial-cluster etcd-node1=http://192.168.1.100:2380​:定义 etcd 集群的初始成员,这里仅有一个节点(后续可以扩展)。
  • 使用 dockerfile 运行

    # 基于 quay.io/coreos/etcd:v3.5.5 构建 FROM quay.io/coreos/etcd:v3.5.5 # 设置环境变量(可以根据需要修改) ENV ETCD_NAME=etcd-node1 ENV ETCD_DATA_DIR=/etcd-data ENV ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 ENV ETCD_ADVERTISE_CLIENT_URLS=http://localhost:2379 # 拷贝自定义配置文件(可选) # 假设你有一个 etcd 的配置文件 custom-config.yml # COPY custom-config.yml /etc/etcd/etcd-config.yml # 暴露端口 EXPOSE 2379 2380 # 设置默认启动命令 CMD ["etcd"]

    使用 docker build 命令在 dockerfile 所在的目录下构建镜像

    docker build -t my-etcd:v1 .

    • -t my-etcd:v1​:为构建的镜像指定名称和标签。
    • .​:表示当前目录是构建上下文。

    构建完成后,你可以运行这个自定义镜像。示例命令如下:

    docker run -d \ --name etcd-server \ -v C:/Users/YourName/etcd-data:/etcd-data \ -p 2379:2379 \ -p 2380:2380 \ my-etcd:v1 \ etcd --name etcd-node1 \ --data-dir /etcd-data \ --advertise-client-urls http://localhost:2379 \ --listen-client-urls http://0.0.0.0:2379
    • 将本地目录 C:/Users/YourName/etcd-data​ 挂载到容器内 /etcd-data​。
    • 通过 -p​ 将容器的 2379 和 2380 端口映射到主机。
    • 你也可以直接利用 Dockerfile​ 中设置的默认 CMD​ 来启动容器。
  • 从 docker desktop 中启动 etcd

    先使用 docker images​ 命令确保已经有了 etcd 镜像

    image

    docker desktop 启动 etcd-2

    填好之后点击 Run

    docker desktop 启动 etcd-3

验证 etcd 是否运行

  • 在命令行中输入 curl http://127.0.0.1:2379/version

    验证 etcd 是否启动

    返回 etcd 的版本信息就表明启动成功了

查看 etcd 中的服务

在容器命令行中可以使用 etcdctl​查看 etcd 注册的服务

查看 etcd 的服务

etcdctl get --prefix "" --keys-only

  • --prefix ""​:表示获取所有键。
  • --keys-only​:只显示键,不显示对应的值。

查看特定前缀的键

如果服务都注册在某个前缀下(例如 /services/​),可以通过指定前缀查看:

etcdctl get --prefix "/services/" --keys-only

查看某个键的值

要查看某个具体服务的信息,可以直接获取其键的值:

etcdctl get /services/service1

示例输出:

/services/service1 {"name": "service1", "address": "192.168.1.10:8080"}

  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 544 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...