docker(十七)docker部署nacos集群

123 阅读18分钟

这里记录一下使用docker部署nacos伪集群的过程。

 

为什么说是伪集群呢?很简单,家里条件没那么富裕,就一台服务器。我在一台服务器上使用docker部署三个nacos服务,所以是伪集群。

 

一:创建nacos专用网络

docker network create my_network

 

二:创建数据库nacos

-- ----------------------------
-- Table structure for config_info
-- ----------------------------
DROP TABLE IF EXISTS `config_info`;
CREATE TABLE `config_info`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'group_id',
  `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',
  `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT current_timestamp COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT current_timestamp COMMENT '修改时间',
  `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',
  `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'configuration description',
  `c_use` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'configuration usage',
  `effect` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '配置生效的描述',
  `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '配置的类型',
  `c_schema` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT '配置的模式',
  `encrypted_data_key` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '密钥',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_configinfo_datagrouptenant`(`data_id` ASC, `group_id` ASC, `tenant_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 20 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_infoROW_FORMAT = Dynamic;
 
-- ----------------------------
-- Table structure for config_info_aggr
-- ----------------------------
DROP TABLE IF EXISTS `config_info_aggr`;
CREATE TABLE `config_info_aggr`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'datum_id',
  `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_configinfoaggr_datagrouptenantdatum`(`data_id` ASC, `group_id` ASC, `tenant_id` ASC, `datum_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '增加租户字段' ROW_FORMAT = Dynamic;
 
-- ----------------------------
-- Table structure for config_info_beta
-- ----------------------------
DROP TABLE IF EXISTS `config_info_beta`;
CREATE TABLE `config_info_beta`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',
  `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT current_timestamp COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT current_timestamp COMMENT '修改时间',
  `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',
  `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '密钥',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_configinfobeta_datagrouptenant`(`data_id` ASC, `group_id` ASC, `tenant_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_betaROW_FORMAT = Dynamic;
 
-- ----------------------------
-- Table structure for config_info_tag
-- ----------------------------
DROP TABLE IF EXISTS `config_info_tag`;
CREATE TABLE `config_info_tag`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',
  `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',
  `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT current_timestamp COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT current_timestamp COMMENT '修改时间',
  `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',
  `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_configinfotag_datagrouptenanttag`(`data_id` ASC, `group_id` ASC, `tenant_id` ASC, `tag_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_tagROW_FORMAT = Dynamic;
 
-- ----------------------------
-- Table structure for config_tags_relation
-- ----------------------------
DROP TABLE IF EXISTS `config_tags_relation`;
CREATE TABLE `config_tags_relation`  (
  `id` bigint NOT NULL COMMENT 'id',
  `tag_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增长标识',
  PRIMARY KEY (`nid`) USING BTREE,
  UNIQUE INDEX `uk_configtagrelation_configidtag`(`id` ASC, `tag_name` ASC, `tag_type` ASC) USING BTREE,
  INDEX `idx_tenant_id`(`tenant_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_tag_relationROW_FORMAT = Dynamic;
 
-- ----------------------------
-- Table structure for group_capacity
-- ----------------------------
DROP TABLE IF EXISTS `group_capacity`;
CREATE TABLE `group_capacity`  (
  `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '配额,0表示使用默认值',
  `usage` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '使用量',
  `max_size` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT current_timestamp COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT current_timestamp COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_group_id`(`group_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '集群、各Group容量信息表' ROW_FORMAT = Dynamic;
 
-- ----------------------------
-- Table structure for his_config_info
-- ----------------------------
DROP TABLE IF EXISTS `his_config_info`;
CREATE TABLE `his_config_info`  (
  `id` bigint UNSIGNED NOT NULL COMMENT 'id',
  `nid` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增标识',
  `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',
  `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',
  `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT current_timestamp COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT current_timestamp COMMENT '修改时间',
  `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',
  `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',
  `op_type` char(10) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'operation type',
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '密钥',
  PRIMARY KEY (`nid`) USING BTREE,
  INDEX `idx_gmt_create`(`gmt_create` ASC) USING BTREE,
  INDEX `idx_gmt_modified`(`gmt_modified` ASC) USING BTREE,
  INDEX `idx_did`(`data_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 194 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '多租户改造' ROW_FORMAT = Dynamic;
 
-- ----------------------------
-- Table structure for permissions
-- ----------------------------
DROP TABLE IF EXISTS `permissions`;
CREATE TABLE `permissions`  (
  `role` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'role',
  `resource` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'resource',
  `action` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'action',
  UNIQUE INDEX `uk_role_permission`(`role` ASC, `resource` ASC, `action` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;
 
-- ----------------------------
-- Table structure for roles
-- ----------------------------
DROP TABLE IF EXISTS `roles`;
CREATE TABLE `roles`  (
  `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'username',
  `role` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'role',
  UNIQUE INDEX `idx_user_role`(`username` ASC, `role` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;
 
-- ----------------------------
-- Table structure for tenant_capacity
-- ----------------------------
DROP TABLE IF EXISTS `tenant_capacity`;
CREATE TABLE `tenant_capacity`  (
  `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '配额,0表示使用默认值',
  `usage` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '使用量',
  `max_size` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '聚合子配置最大个数',
  `max_aggr_size` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT current_timestamp COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT current_timestamp COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_tenant_id`(`tenant_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '租户容量信息表' ROW_FORMAT = Dynamic;
 
-- ----------------------------
-- Table structure for tenant_info
-- ----------------------------
DROP TABLE IF EXISTS `tenant_info`;
CREATE TABLE `tenant_info`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_tenant_info_kptenantid`(`kp` ASC, `tenant_id` ASC) USING BTREE,
  INDEX `idx_tenant_id`(`tenant_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'tenant_infoROW_FORMAT = Dynamic;
 
-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (
  `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'username',
  `password` varchar(500) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'password',
  `enabled` tinyint(1NOT NULL COMMENT 'enabled',
  PRIMARY KEY (`username`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;
 
SET FOREIGN_KEY_CHECKS = 1;

 

三:部署nacos集群

先放一下官方网站地址:nacos.io/docs/v2.3/q…

具体你可以参考一下官网的部署以及对参数的解释。

docker run -d \
-p 17848:7848 \
-p 18848:8848 \
-p 19848:9848 \
-p 19849:9849 \
-e NACOS_AUTH_ENABLE=true \
-e JVM_XMS=128m \
-e JVM_XMX=128m \
-e JVM_XMN=128m \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVER_PORT=8848 \
-e NACOS_SERVERS="172.18.0.3 172.18.0.2 172.18.0.4" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=1.15.157.156 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD='xxx' \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false' \
-e NACOS_SERVER_IP=172.18.0.2 \
-e NACOS_AUTH_IDENTITY_KEY=2222 \
-e NACOS_AUTH_IDENTITY_VALUE=2xxx \
-e NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 \
-v /opt/docker/nacos/nacos-one/data:/home/nacos/data \
-v /opt/docker/nacos/nacos-one/logs:/home/nacos/logs \
--privileged=true \
--restart=always \
--name nacos-one \
--net=nacos-net \
nacos/nacos-server:v2.3.2
docker run -d \
-p 27848:7848 \
-p 28848:8848 \
-p 29848:9848 \
-p 29849:9849 \
-e NACOS_AUTH_ENABLE=true \
-e JVM_XMS=128m \
-e JVM_XMX=128m \
-e JVM_XMN=128m \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVER_PORT=8848 \
-e NACOS_SERVERS="172.18.0.3 172.18.0.2 172.18.0.4" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=1.15.157.156 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD='xxx' \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false' \
-e NACOS_SERVER_IP=172.18.0.3 \
-e NACOS_AUTH_IDENTITY_KEY=2222 \
-e NACOS_AUTH_IDENTITY_VALUE=2xxx \
-e NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 \
-v /opt/docker/nacos/nacos-two/data:/home/nacos/data \
-v /opt/docker/nacos/nacos-two/logs:/home/nacos/logs \
--privileged=true \
--restart=always \
--name nacos-two \
--net=nacos-net \
nacos/nacos-server: v2.3.2
docker run -d \
-p 37848:7848 \
-p 38848:8848 \
-p 39848:9848 \
-p 39849:9849 \
-e NACOS_AUTH_ENABLE=true \
-e JVM_XMS=128m \
-e JVM_XMX=128m \
-e JVM_XMN=128m \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVER_PORT=8848 \
-e NACOS_SERVERS="172.18.0.3 172.18.0.2 172.18.0.4" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=1.15.157.156 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD='xxx' \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false' \
-e NACOS_SERVER_IP=172.18.0.4 \
-e NACOS_AUTH_IDENTITY_KEY=2222 \
-e NACOS_AUTH_IDENTITY_VALUE=2xxx \
-e NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 \
-v /opt/docker/nacos/nacos-three/data:/home/nacos/data \
-v /opt/docker/nacos/nacos-three/logs:/home/nacos/logs \
--privileged=true \
--restart=always \
--name nacos-three \
--net=nacos-net \
nacos/nacos-server:v2.3.2

 

参数说明:

参数说明
-d支持后台运行模式
-p 8848:8848把容器内的端口8848挂载到宿主机8848上面
-p 9848:9848 把容器内的端口9848挂载到宿主机9848上面
-e NACOS_AUTH_ENABLE=true开启 Nacos server 的注册鉴权
-e JVM_XMS=128m为jvm启动时分配的内存
-e JVM_XMX=128m为jvm运行过程中分配的最大内存
-e JVM_XMN=128m为jvm设置年轻代的大小
-e PREFER_HOST_MODE=ip是否支持hostname,可选项:hostname/ip,默认值ip
-e MODE=cluster集群模式或者单独模式, 可选项:cluster/standalone,默认值cluster
-e NACOS_SERVER_PORT=8848nacos服务端口
-e NACOS_SERVERS="192.168.3.216:8848   192.168.3.217:8848 192.168.3.218:8848"nacos集群地址
-e SPRING_DATASOURCE_PLATFORM=mysql以mysql为nacos做数据持久化
-e MYSQL_SERVICE_HOST=192.168.3.215mysql地址
-e MYSQL_SERVICE_PORT=3306mysql访问地址
-e MYSQL_SERVICE_USER=rootmysql账号
-e MYSQL_SERVICE_PASSWORD=rootmysql密码
-e MYSQL_SERVICE_DB_NAME=nacos_configmysql使用库
-e MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false'mysql常用连接参数
-e NACOS_SERVER_IP=192.168.3.218nacos单机注册地址
-v /usr/local/software/nacos/logs:/home/nacos/logs挂在nacos运行日志
--privileged=true使用root权限运行容器
--restart=always容器自动运行
--name nacos3容器名字
-e NACOS_AUTH_IDENTITY_KEY表示 Nacos 认证身份的键。当启用认证功能时,需要使用身份键和身份值进行身份验证。身份键可以是用户名、应用程序名称或任何其他标识符。
-e NACOS_AUTH_IDENTITY_VALUE表示 Nacos 认证身份的值。当启用认证功能时,需要使用身份键和身份值进行身份验证。身份值可以是用户名、应用程序名称或任何其他与身份键相对应的值。
-e NACOS_AUTH_TOKEN表示 Nacos 的认证令牌。当启用认证功能时,需要使用认证令牌进行身份验证。如果未提供正确的认证令牌,将无法访问 Nacos 的管理接口和配置信息。(建议使用随机生成的字符串作为认证令牌,并且确保它足够长和复杂,以提高安全性。)
nacos/nacos-server:2.3.2使用docker镜像

 

至此,nacos的三集群就已经部署完成了。

 

但是,有一个小小的问题,docker这个命令有点low。下面我尝试了一下docker-compose.yml

 

四:docker-compose.yml

Docker-compose.yml其实很简单,就是将上边的docker命令按照docker-compose的语法写一下即可。

 

这里不需要先创建网卡network

 

1:nacos-compose-one节点

Docker-compose.yml

version: "3.8"
services:
  nacos-compose-one:
    container_name: nacos-compose-one     # 容器名称
    image: "nacos/nacos-server:v2.3.2"    # 镜像名称
    restart: on-failure:3                 # 重启策略
    ports:                                # 端口映射
      - "17848:7848"
      - "18848:8848"
      - "19848:9848"
      - "19849:9849"
    environment:                          # 环境变量(这里边的值不能用引号来包裹,否则会报错)
      - TZ=Asia/Shanghai                  # 时区
      - MODE=cluster                      # 集群模式
      - PREFER_HOST_MODE=ip               # 优先使用ip
      - NACOS_SERVER_PORT=8848            # 容器端口
      - NACOS_SERVERS=172.40.0.3 172.40.0.2 172.40.0.4    # 集群地址
      - MYSQL_SERVICE_HOST=1.15.157.156                   # 数据库地址
      - MYSQL_SERVICE_DB_NAME=nacos                       # 数据库名称
      - MYSQL_SERVICE_PORT=3306                           # 数据库端口
      - MYSQL_SERVICE_USER=root                           # 数据库用户名
      - MYSQL_SERVICE_PASSWORD=zishang1021!@#             # 数据库密码
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false  # 数据库连接参数
      - JVM_XMS=128m                              # jvm初始内存
      - JVM_XMX=128m                              # jvm最大内存
      - JVM_XMN=128m                              # jvm young空间
      - NACOS_AUTH_ENABLE=true                    # 是否开启权限控制
      - SPRING_DATASOURCE_PLATFORM=mysql          # 数据库类型
      - NACOS_SERVER_IP=172.40.0.2                # nacos服务IP
      - NACOS_AUTH_IDENTITY_KEY=2222              # 认证key
      - NACOS_AUTH_IDENTITY_VALUE=2xxx            # 认证value
      - NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789        # 认证token
    volumes:                                                                                          # 持久化数据
      - /opt/docker/nacos/nacos-compose-one/data:/home/nacos/data
      - /opt/docker/nacos/nacos-compose-one/logs:/home/nacos/logs
    networks:                                     # 网络
      nacos-network:                              # 网络
        ipv4_address: 172.40.0.2                  # ip
 
# 保证nacos集群服务在同一个网段
networks:                                         # 网络
  nacos-network:                                  # 网卡名称
    ipam:                                         # ipam
      driver: default                             # 驱动:默认  
      config:                                     # 配置
        - subnet: 172.40.0.0/16                   # 子网

 

 

2:nacos-compose-two节点

Docker-compose.yml

version: "3.8"
services:
  nacos-compose-two:
    container_name: nacos-compose-two
    image: "nacos/nacos-server:v2.3.2"
    restart: on-failure:3
    ports:
      - "27848:7848"
      - "28848:8848"
      - "29848:9848"
      - "29849:9849"
    environment:
      - TZ=Asia/Shanghai
      - MODE=cluster
      - PREFER_HOST_MODE=ip
      - NACOS_SERVER_PORT=8848
      - NACOS_SERVERS=172.40.0.3 172.40.0.2 172.40.0.4
      - MYSQL_SERVICE_HOST=1.15.157.156
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=zishang1021!@#
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false
      - JVM_XMS=128m
      - JVM_XMX=128m
      - JVM_XMN=128m
      - NACOS_AUTH_ENABLE=true
      - SPRING_DATASOURCE_PLATFORM=mysql
      - NACOS_SERVER_IP=172.40.0.2
      - NACOS_AUTH_IDENTITY_KEY=2222
      - NACOS_AUTH_IDENTITY_VALUE=2xxx
      - NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
    volumes:
      - /opt/docker/nacos/nacos-compose-two/data:/home/nacos/data
      - /opt/docker/nacos/nacos-compose-two/logs:/home/nacos/logs
    networks:                                                   # 网络
      one_nacos-network:                                        # 网卡名称
        ipv4_address: 172.40.0.3                                # 网卡IP
 
networks:                                                       # 网络
  one_nacos-network:                                            # 网卡名称
    external: true                                              # 是否外部网络

 

子节点主要关注一下网卡部分即可。one_nacos-network:网卡是上一个docker-compose中创建的。别问我怎么知道的。问就是我查看的。都是坑。

 

当然,你要是在一个docker-compose中运行三个nacos服务网络设置就使用如下的配置即可:

version: "3.8"
services:
  nacos-compose-one:
    container_name: nacos-compose-one     # 容器名称
    networks:                                     # 网络
      nacos-network:                              # 网络
        ipv4_address: 172.40.0.2                  # ip
 
  nacos-compose-two:
    container_name: nacos-compose-two     # 容器名称
    networks:                                     # 网络
      nacos-network:                              # 网络
        ipv4_address: 172.40.0.3                  # ip
 
# 保证nacos集群服务在同一个网段
networks:                                         # 网络
  nacos-network:                                  # 网卡名称
    ipam:                                         # ipam
      driver: default                             # 驱动:默认  
      config:                                     # 配置
        - subnet: 172.40.0.0/16                   # 子网

 

运行命令:

docker compose up -d

 

运行成功之后,如下图所示:

 

以上大概就是docker部署nacos集群的基本流程。有docker命令,还有docker-compose,用那个都可以,看你自己的喜好。

20250428更新:

集群部署如果报错,就换一个IP,比如当前IP是172.40.0.2,启动报错,换成172.40.2.5,可能就不错报错了。

目前使用的docker-compose.yml如下:

version: "3.8"
 
# 共享环境变量配置
x-env: &env
  # 数据库配置(生产建议使用云数据库)
  SPRING_DATASOURCE_PLATFORM: mysql
  MYSQL_SERVICE_HOST: 8.155.40.76
  MYSQL_SERVICE_PORT: "3306"
  MYSQL_SERVICE_DB_NAME: nacos
  MYSQL_SERVICE_USER: root
  MYSQL_SERVICE_PASSWORD: zishang1021!@#
  MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=3000&socketTimeout=5000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
  MYSQL_SERVICE_DRIVER_CLASS_NAME: com.mysql.cj.jdbc.Driver
 
  # 集群基础配置
  MODE: cluster
  # MODE: standalone
  PREFER_HOST_MODE: ip
  NACOS_SERVER_PORT: 8848
  TZ: Asia/Shanghai
  # NACOS_SERVERS: "nacos-node1:8848 nacos-node2:8848 nacos-node3:8848"
  NACOS_SERVERS:   172.40.0.5 172.40.0.4 172.40.0.3
  
  # 安全配置
  NACOS_AUTH_ENABLE: "true"
  NACOS_AUTH_IDENTITY_KEY: 2222
  NACOS_AUTH_IDENTITY_VALUE: 2xxx
  NACOS_AUTH_TOKEN: SecretKey012345678901234567890123456789012345678901234567890123456789
  
  # 资源限制
  JVM_XMS: 64m
  JVM_XMX: 64m
  JVM_XMN: 64m
 
# 配置网卡,集群尽可能使用一块网卡,内网通讯
networks:
  nacos-network:
    ipam:
      driver: default
      config:
        - subnet: 172.40.0.0/24
 
# 配置容器
services:
  nacos-compose-one:
    container_name: nacos-compose-one
    image: "nacos/nacos-server:v2.3.2"
    restart: on-failure:3
    ports:
      - "7848:7848"
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
    environment:
      <<: *env
      # 节点特定配置
      NACOS_SERVER_IP: 172.40.0.5
    volumes:
      - /opt/docker/nacos/nacos-compose-one/data:/home/nacos/data
      - /opt/docker/nacos/nacos-compose-one/logs:/home/nacos/logs
    networks:
      nacos-network:
        ipv4_address: 172.40.0.5
  nacos-compose-two:
    container_name: nacos-compose-two
    image: "nacos/nacos-server:v2.3.2"
    restart: on-failure:3
    ports:
      - "17848:7848"
      - "18848:8848"
      - "19848:9848"
      - "19849:9849"
    environment:
      <<: *env
      # 节点特定配置
      NACOS_SERVER_IP: 172.40.0.3
    volumes:
      - /opt/docker/nacos/nacos-compose-two/data:/home/nacos/data
      - /opt/docker/nacos/nacos-compose-two/logs:/home/nacos/logs
    networks:
      nacos-network:
        ipv4_address: 172.40.0.3

有好的建议,请在下方输入你的评论。