docker部署etcd實踐過程
更新時間:2025年12月05日 14:14:27 作者:野豬佩擠
文章介紹了如何創(chuàng)建網(wǎng)絡(luò)、啟動Etcd服務(wù)器實例并將其附加到app-tier網(wǎng)絡(luò),以及如何啟動Etcd客戶端實例進行查詢
第 1 步:創(chuàng)建網(wǎng)絡(luò)
docker network create app-tier --driver bridge
第 2 步:啟動 Etcd 服務(wù)器實例
使用命令的–network app-tier參數(shù)docker run將 Etcd 容器附加到app-tier網(wǎng)絡(luò)
docker run -d --name Etcd-server \
--network app-tier \
--publish 2379:2379 \
--publish 2380:2380 \
--env ALLOW_NONE_AUTHENTICATION=yes \
--env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \
bitnami/etcd:latest
第 3 步:啟動您的 Etcd 客戶端實例
docker run -it --rm \
--network app-tier \
--env ALLOW_NONE_AUTHENTICATION=yes \
bitnami/etcd:latest etcdctl --endpoints http://etcd-server:2379 put /message Hello

docker run -it --rm --network app-tier --env ALLOW_NONE_AUTHENTICATION=yes bitnami/etcd:latest etcdctl --endpoints http://etcd-server:2379 get /message Hello

查詢
package main
import (
"context"
"fmt"
"time"
"github.com/coreos/etcd/clientv3"
)
func main() {
/*
DialTimeout time.Duration `json:"dial-timeout"`
Endpoints []string `json:"endpoints"`
*/
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{"192.168.8.111:2379"},
DialTimeout: 5 * time.Second,
})
if err != nil {
fmt.Println("connect failed, err:", err)
return
}
fmt.Println("連接成功")
defer cli.Close()
//---------------------------------
//設(shè)置1秒超時,訪問etcd有超時控制
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
cancel()
//取值,設(shè)置超時為1秒
ctx, cancel = context.WithTimeout(context.Background(), time.Second)
resp, err := cli.Get(ctx, "/message")
cancel()
if err != nil {
fmt.Println("get failed, err:", err)
return
}
for _, ev := range resp.Kvs {
fmt.Printf("%s : %s\n", ev.Key, ev.Value)
}
}

etcd存取
package main
import (
"context"
"fmt"
"github.com/coreos/etcd/clientv3"
"time"
)
func main() {
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{"localhost:2379", "localhost:22379", "localhost:32379"},
DialTimeout: 5 * time.Second,
})
if err != nil {
fmt.Println("connect failed, err:", err)
return
}
fmt.Println("連接成功")
defer cli.Close()
//設(shè)置1秒超時,訪問etcd有超時控制
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
//操作etcd
_, err = cli.Put(ctx, "/test/conf/", "sample_value")
//操作完畢,取消etcd
cancel()
if err != nil {
fmt.Println("put failed, err:", err)
return
}
//取值,設(shè)置超時為1秒
ctx, cancel = context.WithTimeout(context.Background(), time.Second)
resp, err := cli.Get(ctx, "/test/conf/")
cancel()
if err != nil {
fmt.Println("get failed, err:", err)
return
}
for _, ev := range resp.Kvs {
fmt.Printf("%s : %s\n", ev.Key, ev.Value)
}
}

官網(wǎng)文檔:
https://etcd.io/docs/v3.5/dev-guide/interacting_v3/
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
在 Centos 7.9 中如何安裝與配置 Docker 20.10.
這篇文章主要介紹了在 Centos 7.9 中如何安裝與配置 Docker 20.10.18,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01
給debian的docker容器添加crontab定時任務(wù)
這篇文章主要介紹了給debian的docker容器添加crontab定時任務(wù)的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08
使用Docker容器運行Oracle數(shù)據(jù)庫方式
這篇文章主要介紹了使用Docker容器運行Oracle數(shù)據(jù)庫方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-05-05

