docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker部署etcd

docker部署etcd实践过程

作者:野猪佩挤

文章介绍了如何创建网络、启动Etcd服务器实例并将其附加到app-tier网络,以及如何启动Etcd客户端实例进行查询

第 1 步:创建网络

 docker network create app-tier --driver bridge

第 2 步:启动 Etcd 服务器实例

使用命令的–network app-tier参数docker run将 Etcd 容器附加到app-tier网络

 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()
	//---------------------------------

	//设置1秒超时,访问etcd有超时控制
	ctx, cancel := context.WithTimeout(context.Background(), time.Second)
	cancel()
	
	//取值,设置超时为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()
    //设置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
    }
    //取值,设置超时为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)
    }
}

官网文档:

https://etcd.io/docs/v3.5/dev-guide/interacting_v3/

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文