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
相关推荐
Kevin Wang7273 小时前
Nvidia-AGX-spark部署手册——课堂质量诊断(jetpack:r36)
python·docker·容器
回眸不遇6 小时前
将 Docker虚拟磁盘文件ext.vhdx迁移出C盘 ,更换到D盘
c语言·docker·容器
雨辰AI6 小时前
K8s人大金仓主从高可用搭建|容器化集群自动同步+故障切换(生产完整版)
云原生·容器·kubernetes
潘正翔7 小时前
k8s基础_kubeadm搭建k8s集群
linux·运维·docker·云原生·容器·kubernetes
Echo flower7 小时前
Docker 容器中 Puppeteer 僵尸进程排查与修复
运维·docker·容器·puppeteer
流星白龙8 小时前
【Docker】3.Docker 组件与生产应用
docker
潘正翔8 小时前
k8s进阶_Harbor镜像仓库
git·云原生·容器·kubernetes·gitee·github
江湖有缘8 小时前
Docker实战 | 使用Docker部署Donetick任务与家务管理应用
运维·docker·容器
流星白龙9 小时前
【Docker】4.NameSpace空间隔离实战
java·运维·docker
Python私教10 小时前
GitHub Actions 实战:把测试、密钥扫描与 Docker 镜像检查接入 CI
ci/cd·docker·github·devsecops·github actions