Write docker-compose.ymlversion: "3.0" networks: etcd-net: # Network driver: bridge # Bridge mode volumes: etcd1_data: # Mounted to the local data volume name driver: local etcd2_data: driver: local etcd3_data: driver: local ### ### etcd For other environment configurations, see: https://doczhcn.gitbook.io/etcd/index/index-1/configuration ### services: etcd1: image: bitnami/etcd:latest # Image container_name: etcd1 # Container name --name restart: always # Always restart networks: - etcd-net # Network used --network ports: #Port mapping -p - "20000:2379" - "20001:2380" environment: # Environment variables --env : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : - etcd1_data:/bitnami/etcd # Mounted data volume etcd2: image: bitnami/etcd:latest container_name: etcd2 restart: always networks: - etcd-net ports: - "20002:2379" - "20003:2380" environment: - ALLOW_NONE_AUTHENTICATION=yes -ETCD_NAME=etcd2 -ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380 -ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 -ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 -ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:2379 -ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 -ETCD_INITIAL_CLUSTER_STATE=new volumes: - etcd2_data:/bitnami/etcd etcd3: image: bitnami/etcd:latest container_name: etcd3 restart: always networks: - etcd-net ports: - "20004:2379" - "20005:2380" environment: - ALLOW_NONE_AUTHENTICATION=yes -ETCD_NAME=etcd3 - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380 -ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 -ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 -ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:2379 -ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 -ETCD_INITIAL_CLUSTER_STATE=new volumes: - etcd3_data:/bitnami/etcd Run docker-compose[root@centos8 etcdtest]# tree . └── docker-compose.yml 0 directories, 1 file [root@centos8 etcdtest]# docker-compose up -d [+] Running 4/4 ⠿ Network etcdtest_etcd-net Created 0.1s ⠿ Container etcd3 Started 0.6s ⠿ Container etcd1 Started 0.7s ⠿ Container etcd2 Started 0.7s [root@centos8 etcdtest]# Check build status Check the node startup status [root@centos8 etcdtest]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 89469f98491f bitnami/etcd:latest "/opt/bitnami/script..." 54 seconds ago Up 53 seconds 0.0.0.0:20004->2379/tcp, :::20004->2379/tcp, 0.0.0.0:20005->2380/tcp, :::20005->2380/tcp etcd3 5454f5a719a2 bitnami/etcd:latest "/opt/bitnami/script..." 54 seconds ago Up 53 seconds 0.0.0.0:20000->2379/tcp, :::20000->2379/tcp, 0.0.0.0:20001->2380/tcp, :::20001->2380/tcp etcd1 bf989f9512b5 bitnami/etcd:latest "/opt/bitnami/script…" 54 seconds ago Up 53 seconds 0.0.0.0:20002->2379/tcp, :::20002->2379/tcp, 0.0.0.0:20003->2380/tcp, :::20003->2380/tcp etcd2 View the mounted data volumes [root@centos8 etcdtest]# docker volume ls DRIVER VOLUME NAME local etcdtest_etcd1_data local etcdtest_etcd2_data local etcdtest_etcd3_data [root@centos8 etcdtest]# docker inspect etcd1 "Mounts": [ { "Type": "volume", "Name": "etcdtest_etcd1_data", "Source": "/var/lib/docker/volumes/etcdtest_etcd1_data/_data", "Destination": "/bitnami/etcd", "Driver": "local", "Mode": "z", "RW": true, "Propagation": "" } ] Test Node Write a key from etcd1 [root@centos8 etcdtest]# docker exec -it etcd1 bash I have no name!@5454f5a719a2:/opt/bitnami/etcd$ etcdctl put name "i am wxf" OK Read a value from etcd2 [wxf@centos8 ~]$ docker exec -it etcd2 bash I have no name!@bf989f9512b5:/opt/bitnami/etcd$ etcdctl get name name i am wxf Build successful! Simple interaction between Golang and etcdpackage main import ( "context" "fmt" "go.etcd.io/etcd/client/v3" "time" ) func main() { cli, err := clientv3.New(clientv3.Config{ Endpoints: []string{"http://192.168.135.10:20000", "http://192.168.135.10:20002", "http://192.168.135.10:20004"}, DialTimeout: 5 * time.Second, }) if err != nil { fmt.Printf("connect to etcd failed, err:%v\n", err) return } defer cli.Close() fmt.Println("connect to etcd success") defer cli.Close() go Watch(cli) Create(cli) Read(cli) Delete(cli) Update(cli) select {} } func Watch(cli *clientv3.Client) { rch := cli.Watch(context.Background(), "name") // type WatchChan <-chan WatchResponse for wresp := range rch { for _, ev := range wresp.Events { fmt.Printf("Type: %s Key: %s Value: %s\n", ev.Type, ev.Kv.Key, ev.Kv.Value) } } fmt.Println("out") } func Create(cli *clientv3.Client) { // put ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) _, err := cli.Put(ctx, "name", "wxf") cancel() if err != nil { fmt.Printf("put to etcd failed, err:%v\n", err) return } } func Read(cli *clientv3.Client) { //get ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) resp, err := cli.Get(ctx, "name") cancel() if err != nil { fmt.Printf("get from etcd failed, err:%v\n", err) return } for _, ev := range resp.Kvs { fmt.Printf("Type: %s Key: %s Value: %s\n", "READ", ev.Key, ev.Value) } } func Update(cli *clientv3.Client) { // put ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) _, err := cli.Put(ctx, "name", "xyy") cancel() if err != nil { fmt.Printf("put to etcd failed, err:%v\n", err) return } } func Delete(cli *clientv3.Client) { //del ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) _, err := cli.Delete(ctx, "name") cancel() if err != nil { fmt.Printf("delete from etcd failed, err:%v\n", err) return } }
This is the end of this article about the implementation steps of docker-compose deployment of etcd cluster. For more relevant content about docker-compose deployment of etcd cluster, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope you will support 123WORDPRESS.COM in the future! You may also be interested in:
|
<<: Our thoughts on the UI engineer career
>>: Detailed explanation of the use of JavaScript functions
<br />Sometimes you may be asked questions l...
After switching from Vue2's writing style to ...
1. Log in to VPN using IE browser 2. Remote login...
There are many differences between IE6 and IE7 in ...
I encountered a requirement to customize shortcut...
Achieve results html <h2>CSS3 Timeline</...
docker attach command docker attach [options] 容器w...
statement : This article teaches you how to imple...
Performance of union all in MySQL 5.6 Part 1:MySQ...
Table of contents 1. JavaScript can change all HT...
Preface This article introduces the use of vue-ro...
Nginx does not support nested if statements, nor ...
1. Basic steps 1: Install yarn add vue-i18n Creat...
Table of contents 1. MySQL replication related co...
Table of contents 01 Background 02 Introduction 0...