Docker Compose 安装 Etcd

在云原生环境下,etcd 是最核心的存储组件之一,也是很多云原生应用都依赖的存储组件,如 Kubernetes、CoreDNS、Rook等。

etcd 在2026年5月最新版本

  • v3.6.11
  • v3.5.30
  • v3.4.44

etcd 的 Docker 容器镜像托管在 Quay.ioGcr.io 两个平台,藏云阁提供镜像的同步

etcd 项目最初由 CoreOS 公司创建并开源,因此其早期镜像托管在 CoreOS 活跃使用的 quay.io 上。随着 etcd 成为 CNCF(云原生计算基金会) 的项目,并成为 Kubernetes 的核心数据存储,它与 Kubernetes 生态的联系愈发紧密。为了让 Kubernetes 集群的部署和运行更加稳定高效,etcd 官方在 2017 年底决定将 gcr.io 作为主要分发渠道之一,但同时也明确表示 quay.io 上的镜像不会被废弃,会继续维护。

其他 etcd 资源:

docker-compose.yml

单机使用 docker-compose 运行 etcd 可以直接使用如下配置。

核心需要注意的配置是 /data/etcd 这个挂载,要指定一个宿主机上的目录,用来保存 etcd 的数据。由于 etcd 是 IO 敏感型的,强烈推荐使用 SSD 类型的磁盘来挂载。

yaml 复制代码
services:
  etcd:
    container_name: etcd
    image: registry.cncfstack.com/quay.io/coreos/etcd:v3.6.11
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G
    ports:
      - "2379:2379"
      - "2380:2380"
    volumes:
      - /data/etcd:/var/lib/etcd
      - /etc/localtime:/etc/localtime:ro
    environment:
      - ETCD_NAME=etcd-node01
      - ETCD_DATA_DIR=/var/lib/etcd
      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
      - ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://0.0.0.0:2380
      - ETCD_INITIAL_CLUSTER=etcd-node01=http://0.0.0.0:2380
      - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster-token
      - ETCD_INITIAL_CLUSTER_STATE=new
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
      - ETCD_SNAPSHOT_COUNT=50000
      - ETCD_LOG_LEVEL=info
      - ETCD_LOGGER=zap
      - ETCD_LISTEN_METRICS_URLS=http://0.0.0.0:2381
    healthcheck:
      test: ["CMD", "etcdctl", "endpoint", "health"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 30s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

在 docker-compose.yml 目录下执行如下命令启动

bash 复制代码
docker-compose up -d

etcdctl alias

etcd 在基于容器部署时,在宿主机上是没有 etcdctl 工具,而直接使用 docker run 运行 etcdctl 命令太长也不方便。

可以通过添加一个 alias 别名的方式来简化命令。

bash 复制代码
IP=`ip addr show eth0 |grep "inet\ "|awk -F'/' '{print $1}'|awk '{print $2}'`
alias etcdctl="docker run -i --rm registry.cncfstack.com/quay.io/coreos/etcd:v3.6.11 etcdctl --endpoints http://${IP}:2379 "

后续可以直接使用 etcdctl 命令来操作 etcd。

验证

验证过程用于判断 etcd 是否安装成功,能否正常读写数据

  • 查看etcd容器状态

使用 docker compose ls 命令查看 etcd 容器状态

bash 复制代码
# docker compose ls  |grep etcd
etcd                running(1)          /xxxxxx/etcd/docker-compose.yml
  • 查看etcd健康状态

etcd 集群健康状态可以通过 etcdctl endpoint health 命令查看

复制代码
# etcdctl endpoint health
http://192.168.1.1:2379 is healthy: successfully committed proposal: took = 2.373165ms
  • 验证etcd数据读写

读写数据测试

bash 复制代码
# etcdctl put aa bb
OK
# etcdctl get aa
aa
bb
相关推荐
сокол8 小时前
【网安-Web渗透测试-靶场系列】AWD-Platform(ctf-hub)
linux·服务器·ubuntu·网络安全·docker
月走乂山11 小时前
Windows 10 WSL2 安装问题排查与解决全记录
windows·docker·hyper-v·故障排查·wsl2
SuniaWang14 小时前
《Agentx专栏》03-架构设计:AgentX的六层架构是如何生长出来的
java·数据库·redis·docker·ai·架构
云游牧者16 小时前
K8S-Helm包管理全解-从入门到Chart开发实战指南
云原生·容器·kubernetes·helm·chart模板
WAIT_TIME18 小时前
基于 Docker 快速构建 MySQL InnoDB Cluster 高可用集群与 Router 读写分离
mysql·docker·集群·innodb cluster
秋漓18 小时前
Docker学习与使用
学习·docker·容器
%KT%18 小时前
Windows安装wsl2和docker desktop,部署qdrant向量数据库
运维·docker·容器
PythonAI实战君18 小时前
Docker Compose 部署 MySQL 中文乱码避坑指南
docker·容器
PythonAI实战君18 小时前
若依后台管理系统 - Docker Compose 阿里云部署指南
后端·docker
小匠石钧知18 小时前
01_以RockyLinux的镜像为基础_构建自己开发学习所需的镜像
linux·docker·jdk·mariadb