docker-compose自动部署etcd-v3

1、环境

  • 操作系统:Centos 7
  • docker版本:19.03.8
  • docker-compose版本:1.25.4
  • etcd 镜像版本: quay.io/coreos/etcd:v3.5.4

2、拉取官方镜像

> docker pull quay.io/coreos/etcd:v3.5.4

3、docker-compose.yml 配置文件

    我这个地方是单节点的配置,其中"192.168.1.100" 需要改为你自己的服务器IP地址。

version: "3"

services:
  etcd:
    image: quay.io/coreos/etcd:v3.5.4
    container_name: etcd
    command: /usr/local/bin/etcd
    restart: always
    networks:
      - deng
    ports:
      - "2379:2379"
      - "2380:2380"
    volumes:
      - "/data/etcd:/etcd-data"
      - "/etc/localtime:/etc/localtime:ro"
    environment:
      # 指定版本
      ETCDCTL_API: 3
      # 日志类型
      ETCD_LOGGER: zap
      # 存储路径
      ETCD_DATA_DIR: /etcd-data
  
      # 节点名称
      ETCD_NAME: node1
      # 创建集群唯一TOKEN
      INITIAL_CLUSTER_TOKEN: etcd-v3-cluster

      # 对外公告该节点客户端监听地址
      ETCD_ADVERTISE_CLIENT_URLS: http://192.168.1.100:2379
      # 本地对外提供服务的地址
      ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:2379

      # 该节点同伴监听地址
      ETCD_INITIAL_ADVERTISE_PEER_URLS: http://0.0.0.0:2380
      # 和其他节点通信的地址
      ETCD_LISTEN_PEER_URLS: http://0.0.0.0:2380
  
      # 初始化集群所有节点列表(逗号隔开)
      ETCD_INITIAL_CLUSTER: node1=http://0.0.0.0:2380
      # 集群初始化状态(新建集群时为new)
      ETCD_INITIAL_CLUSTER_STATE: new
      # 启用K-V键值自动压缩存盘
      ETCD_AUTO_COMPACTION_RETENTION: 1


networks:
  deng:
    external: true

4、后台运行etcd服务

> docker-compose up -d etcd

5、docker-compose 参数说明

  • volumes:我们把宿主机的目录映射到容器的 /etcd-data 目录目的是,每次重新创建容器,数据不会清空

  • environment:用来为容器设置环境变量,使用docker exec {containerID} env即可查看容器中生效的环境变量

  • command:启动容器时所运行的指令,使用 command 可以覆盖 environment 所设置的环境变量值

  • restart:设置为always,当 docker 重启时,容器也会自动重启。

6、登入容器内部

> docker exec -it etcd /bin/sh
  1. 查看 ETCDCTL_API环境变量 > echo $ETCDCTL_API

  2. 查看 etcd 版本 > etcd --version

  3. 查看 etcdctl 版本 > etcdctl version

  4. put k-v 值 > etcdctl put foo bar

  5. get k 值 > etcdctl foo

  6. del k 值 > etcdctl del foo

  7. 登出容器指令 > exit

5、Etcd-manage UI 管理工具

  开源地址:https://github.com/etcd-manage/etcd-manage-server

 1.  docker-compose.yml 配置如下

version: "3"

services:
  etcd-ui:
    image: shinxiang/etcd-manage:latest
    container_name: etcd-ui
    restart: always
    networks:
      - deng
    ports:
      - "10280:10280"
    volumes:
      - "./conf/cfg.toml:/app/config/cfg.toml"
      - "./logs/:/app/logs"
      - "/etc/localtime:/etc/localtime:ro"


networks:
  deng:
    external: true

  2. 部署前需先导入MySQL脚本,如下

/*
 Navicat Premium Data Transfer

 Source Server Type    : MySQL
 Source Host           : 127.0.0.1:3306
 Source Schema         : etcd-manage

 Target Server Type    : MySQL
 Target Server Version : 5.7.44

 Date: 24/05/2024 19:21:26
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for etcd_servers
-- ----------------------------
DROP TABLE IF EXISTS `etcd_servers`;
CREATE TABLE `etcd_servers`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `version` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'v3' COMMENT 'etcd版本',
  `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'etcd服务名字',
  `address` varchar(600) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'etcd地址列表',
  `prefix` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'key前缀,建议不为空,防止大量key',
  `tls_enable` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'true' COMMENT '是否启用tls连接',
  `cert_file` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '证书',
  `key_file` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '证书',
  `ca_file` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '证书',
  `username` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户名',
  `password` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '密码',
  `desc` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '描述信息',
  `created_at` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `updated_at` datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'etched server列表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of etcd_servers
-- ----------------------------
INSERT INTO `etcd_servers` VALUES (1, 'v3', '本机测试', '192.168.1.100:2379', '', 'false', '', '', '', '', '', '默认未启用ssl', NULL, '2024-05-24 10:45:34');
INSERT INTO `etcd_servers` VALUES (2, 'v3', '集群测试', '127.0.0.1:2379,127.0.0.1:12379,127.0.0.1:22379', '', 'false', '', '', '', '', '', '', NULL, '2024-05-24 11:20:54');

-- ----------------------------
-- Table structure for role_etcd_servers
-- ----------------------------
DROP TABLE IF EXISTS `role_etcd_servers`;
CREATE TABLE `role_etcd_servers`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `etcd_server_id` int(11) NOT NULL DEFAULT 0 COMMENT 'etcd服务id',
  `role_id` int(11) NOT NULL COMMENT '角色id',
  `type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0读 1写 -1无任何权限',
  `created_at` datetime NOT NULL COMMENT '添加时间',
  `updated_at` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `idx_role_id`(`role_id`) USING BTREE,
  INDEX `idx_etcd_server_id`(`etcd_server_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色权限表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of role_etcd_servers
-- ----------------------------
INSERT INTO `role_etcd_servers` VALUES (1, 1, 1, 1, '2019-08-21 12:48:19', '2024-05-24 10:45:35');
INSERT INTO `role_etcd_servers` VALUES (2, 2, 1, 1, '2019-08-21 12:48:19', '2024-05-24 19:20:01');

-- ----------------------------
-- Table structure for roles
-- ----------------------------
DROP TABLE IF EXISTS `roles`;
CREATE TABLE `roles`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '角色名',
  `created_at` datetime NOT NULL COMMENT '添加时间',
  `updated_at` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of roles
-- ----------------------------
INSERT INTO `roles` VALUES (1, '高级管理员', '2019-08-14 19:43:44', '2019-08-14 19:43:48');
INSERT INTO `roles` VALUES (2, '开发只读', '2019-08-18 04:14:42', '2019-08-18 04:32:02');
INSERT INTO `roles` VALUES (3, '开发管理', '2019-08-18 04:25:05', '2019-08-18 04:32:21');

-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户名',
  `password` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '密码',
  `email` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '邮箱',
  `role_id` int(11) NOT NULL DEFAULT 0 COMMENT '角色id',
  `created_at` datetime NOT NULL COMMENT '添加时间',
  `updated_at` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES (1, 'admin', 'bfb4216c2b79c294dc503795209ffe39', '123456', 1, '2019-08-12 20:19:15', '2024-05-24 10:47:47');

SET FOREIGN_KEY_CHECKS = 1;

  3.  创建 ./conf/cfg.toml 配置文件

# debug模式
debug = false
# 日志文件路径
log_path = ""

# http 监听端口
[http]
# 监听地址
address = "0.0.0.0"
# 监听端口
port = 10280

# 使用 Let's Encrypt 证书 - tls_enable为true优先使用本地证书模式
tls_encrypt_enable = false
# 域名列表
tls_encrypt_domain_names = ["your-domain.com"]

# 是否启用tls
tls_enable = false
# tls证书文件
[http.tls_config]
cert_file = "cert_file"
key_file = "key_file"


## mysql 配置
[db]
## 是否调试模式
debug = true
## 数据库连接地址 - docker run 不可以是'127.0.0.1'
address = "192.168.1.100"
## 数据库端口
port = 3306
## 数据库用户名
user = "root"
## 数据库密码
passwd = "123456"
## 数据库名
db_name = "etcd-manage"

## 连接池最大连接数
max_idle_conns = 2
## 默认打开连接数
max_open_conns = 1

  4. 启动后在浏览器中访问 http://127.0.0.1:10280/ui ,默认用户密码  admin/123456

参考链接

官网:The etcd documentation

使用docker-compose部署etcd
docker-compose 部署 etcd

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值