centos7.x下docker安装nacos2.5.1集群(3台物理机真实集群)
1 引言
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中,Nacos的主要作用和意义包括以下几个方面:
1.服务注册与发现:微服务启动时会自动将自身信息(如IP、端口、健康状态)注册到Nacos。服务消费者可以通过Nacos动态发现其他服务的实例,实现服务间的通信。Nacos支持基于DNS和基于RPC的服务发现,并提供实时的健康检查,确保服务的可用性;
2.动态配置管理:Nacos允许以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。配置更新后,Nacos会实时推送到客户端,无需重启应用,大大提高了配置管理的效率和灵活性。Nacos还支持配置版本管理、灰度发布和一键回滚等功能;
3.健康检查:Nacos会定期检查服务实例的健康状态,自动剔除不健康的实例。它支持传输层和应用层的健康检查,适用于复杂的云环境和网络拓扑结构;
4.多环境支持:Nacos支持多环境(如开发、测试、生产)的配置隔离,方便在不同环境中使用不同的配置。这有助于在不同阶段快速切换和部署应用;
5.元数据管理和流量管理:Nacos支持为服务实例添加自定义元数据(如版本号、环境信息),并提供基于权重的流量分配和路由策略。这有助于实现精细化的流量管理和服务治理;
6.社区支持和持续迭代:Nacos由阿里巴巴内部项目发展而来,并于2018年首次开源。它经历了多个版本的迭代和优化,逐渐形成了成熟的产品形态,广泛应用于各种业务场景。
通过这些功能,Nacos极大地简化了微服务架构中的服务管理和配置工作,提高了系统的可靠性和可维护性,是现代分布式系统不可或缺的工具。
2 环境准备
准备5台服务器,2台安装nginx和mysql,另3台做集群使用。
| IP | 服务 | 操作系统 |
|---|---|---|
| 172.16.250.84 | Mysql | CentOS 7.4 |
| 172.16.250.92 | Nginx | CentOS 7.4 |
| 172.16.250.93 | nacos-1 | CentOS 7.4 |
| 172.16.250.95 | nacos-2 | CentOS 7.4 |
| 172.16.250.96 | nacos-3 | CentOS 7.4 |
另外centos7.4系统服务器上要求安装上docker(docker-compose可选安装)(可以参看我的博客《docker&docker-compose实战 | docker&docker-compose自身安装系列 | 第一篇:centos7.x下docker & docker-compose安装》)。mysql选用8.0.11 需要提前安装(可以参看我的博客《docker&docker-compose实战 | docker&docker-compose安装基础中间件系列 | 第一篇:centos7.x下docker安装mysql8.x》),并且部署nacos数据库脚本,nacos脚本可以看下面内容。
![图片[1] - Spring Cloud2024.x实战 | nacos系列 | 第1篇:centos7.x下docker安装nacos2.5.1集群(3台物理机真实集群) - 宋马](https://pic.songma.com/blogimg/20250523/7a5d3be7014d4b028de469d88a2087fc.png)
![图片[2] - Spring Cloud2024.x实战 | nacos系列 | 第1篇:centos7.x下docker安装nacos2.5.1集群(3台物理机真实集群) - 宋马](https://pic.songma.com/blogimg/20250523/b487aa37576a49289dac939dcb20258a.png)

3 部署nacos集群
3.1 拉取nacos镜像
三台服务器都需要执行
docker pull nacos/nacos-server:v2.5.1
3.2 创建宿主机nacos数据、配置和日志存储目录
三台服务器都需要执行
mkdir -p /data/soft/nacos/{
conf,logs,data}
3.3 复制容器默认配置文件到宿主机
docker run -d --name nacos nacos/nacos-server:v2.5.1
docker cp nacos:/home/nacos/conf/. /data/soft/nacos/conf/
docker rm -f nacos
3.4 创建数据库并表初始化
在172.12.250.84机器的mysql数据库中创建
创建nacos251数据库:
可执行如下脚本:
CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
示例:
CREATE DATABASE `nacos251` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
导入/data/soft/nacos/conf/mysql-schema.sql文件
下载地址:nacos2.5.1
/*
* Copyright 1999-2018 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/******************************************/
/* 表名称 = config_info */
/******************************************/
CREATE TABLE `config_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) DEFAULT NULL COMMENT 'group_id',
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) 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 COMMENT 'source user',
`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`c_desc` varchar(256) DEFAULT NULL COMMENT 'configuration description',
`c_use` varchar(64) DEFAULT NULL COMMENT 'configuration usage',
`effect` varchar(64) DEFAULT NULL COMMENT '配置生效的描述',
`type` varchar(64) DEFAULT NULL COMMENT '配置的类型',
`c_schema` text COMMENT '配置的模式',
`encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
/******************************************/
/* 表名称 = config_info since 2.5.0 */
/******************************************/
CREATE TABLE `config_info_gray` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`src_user` text COMMENT 'src_user',
`src_ip` varchar(100) DEFAULT NULL COMMENT 'src_ip',
`gmt_create` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_create',
`gmt_modified` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_modified',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
`gray_name` varchar(128) NOT NULL COMMENT 'gray_name',
`gray_rule` text NOT NULL COMMENT 'gray_rule',
`encrypted_data_key` varchar(256) NOT NULL DEFAULT '' COMMENT 'encrypted_data_key',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfogray_datagrouptenantgray` (`data_id`,`group_id`,`tenant_id`,`gray_name`),
KEY `idx_dataid_gmt_modified` (`data_id`,`gmt_modified`),
KEY `idx_gmt_modified` (`gmt_modified`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='config_info_gray';
/******************************************/
/* 表名称 = config_tags_relation */
/******************************************/
CREATE TABLE `config_tags_relation` (
`id` bigint(20) NOT NULL COMMENT 'id',
`tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
`tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
`nid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增长标识',
PRIMARY KEY (`nid`),
UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
/******************************************/
/* 表名称 = group_capacity */
/******************************************/
CREATE TABLE `group_capacity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
`max_history_count` int(10) 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`),
UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
/******************************************/
/* 表名称 = his_config_info */
/******************************************/
CREATE TABLE `his_config_info` (
`id` bigint(20) unsigned NOT NULL COMMENT 'id',
`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增标识',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) 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 COMMENT 'source user',
`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
`op_type` char(10) DEFAULT NULL COMMENT 'operation type',
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
`publish_type` varchar(50) DEFAULT 'formal' COMMENT 'publish type gray or formal',
`gray_name` varchar(50) DEFAULT NULL COMMENT 'gray name',
`ext_info` longtext DEFAULT NULL COMMENT 'ext info',
PRIMARY KEY (`nid`),
KEY `idx_gmt_create` (`gmt_create`),
KEY `idx_gmt_modified` (`gmt_modified`),
KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
/******************************************/
/* 表名称 = tenant_capacity */
/******************************************/
CREATE TABLE `tenant_capacity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
`max_history_count` int(10) 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`),
UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
CREATE TABLE `tenant_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`kp` varchar(128) NOT NULL COMMENT 'kp',
`tenant_id` varchar(128) default '' COMMENT 'tenant_id',
`tenant_name` varchar(128) default '' COMMENT 'tenant_name',
`tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
`create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
`gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
`gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
CREATE TABLE `users` (
`username` varchar(50) NOT NULL PRIMARY KEY COMMENT 'username',
`password` varchar(500) NOT NULL COMMENT 'password',
`enabled` boolean NOT NULL COMMENT 'enabled'
);
CREATE TABLE `roles` (
`username` varchar(50) NOT NULL COMMENT 'username',
`role` varchar(50) NOT NULL COMMENT 'role',
UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);
CREATE TABLE `permissions` (
`role` varchar(50) NOT NULL COMMENT 'role',
`resource` varchar(128) NOT NULL COMMENT 'resource',
`action` varchar(8) NOT NULL COMMENT 'action',
UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);
创建账号密码nacos/nacos
可执行如下脚本:
-- 创建账号设置密码 WITH mysql_native_password 指定密码加密模式
create user '用户名'@'域' IDENTIFIED WITH mysql_native_password by '密码';
-- 示例1 % 表示允许所有地点远程连接登录
create user 'user1'@'%' IDENTIFIED WITH mysql_native_password by '123456';
-- 示例2 localhost 表示只允许同服务器本地登录
create user 'user1'@'localhost' IDENTIFIED WITH mysql_native_password by '123456';
-- 示例3 指定具体IP时,表示只允许IP来源为指定IP 的客户端登录
create user 'user1'@'xxx.xxx.xxx.xxx' IDENTIFIED WITH mysql_native_password by '123456';
示例4:
CREATE USER 'nacos'@'%' IDENTIFIED WITH mysql_native_password BY 'nacos';
设置数据库权限
可执行如下脚本:
-- 将指定数据库中所有表 的所有权限发给指定 用户和域
grant all privileges on `数据库名`.* to '用户名'@'%';
-- 如果给所有数据库所有表 的所有权限
grant all privileges on *.* to '用户名'@'%';
-- 也可以指定具体的表
grant all privileges on `数据库名`.`tableName` to '用户名'@'%';
示例:
GRANT ALL PRIVILEGES ON `nacos251`.* TO 'nacos'@'%';
刷新权限生效
-- 使修改的用户权限立刻生效
flush privileges;
3.5 编辑配置文件
编辑宿主机配置文件 /data/soft/nacos/conf/application.properties,例如:
### The default token:
# Base64加密前密码 lecher.S#Ea%b.-JAa2f63.5-TZ+G_WC
# Base64加密后密码 bGVjaGVyLlMjRWElYi4tSkFhMmY2My41LVRaK0dfV0M=
# 加密网站:https://www.qqxiuzi.cn/bianma/base64.htm
# 自定义密钥,在自定义密钥时,推荐将配置项设置为Base64编码的字符串,且原始密钥长度不得低于32字符。同nacos.core.auth.plugin.nacos.token.secret.key
# 默认鉴权插件用于生成用户登陆临时accessToken所使用的密钥,在2.2.0.1后无默认值,必须执行此变更,否则无法启动;其他版本为建议设置。
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:}
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
# 用于替换useragent白名单的身份识别key,不可为空,2.2.1后无默认值
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:}
# 用于替换useragent白名单的身份识别value,不可为空,2.2.1后无默认值
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:}
3.6 运行容器(完整文件映射)
nacos1(172.16.250.93)docker执行命令
docker run -d
--name nacos
-p 7848:7848
-p 8848:8848
-p 9848:9848
-p 9849:9849
-e MODE=cluster
-e NACOS_AUTH_ENABLE=true
-e PREFER_HOST_MODE=ip
-e NACOS_SERVER_PORT=8848
-e NACOS_SERVERS="172.16.250.93:8848 172.16.250.95:8848 172.16.250.96:8848"
-e NACOS_AUTH_TOKEN=bGVjaGVyLlMjRWElYi4tSkFhMmY2My41LVRaK0dfV0M=
-e NACOS_AUTH_IDENTITY_KEY=nacosKey
-e NACOS_AUTH_IDENTITY_VALUE=nacosValue
-e NACOS_SERVER_IP=172.16.250.93
-e SPRING_DATASOURCE_PLATFORM=mysql
-e MYSQL_SERVICE_HOST=172.16.250.84
-e MYSQL_SERVICE_PORT=3306
-e MYSQL_SERVICE_DB_NAME=nacos251
-e MYSQL_SERVICE_USER=nacos
-e MYSQL_SERVICE_PASSWORD=nacos
-e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true"
-v /data/soft/nacos/conf:/home/nacos/conf
-v /data/soft/nacos/logs:/home/nacos/logs
-v /data/soft/nacos/data:/home/nacos/data
--restart=always
--privileged=true
nacos/nacos-server:v2.5.1
nacos2(172.16.250.95)docker执行命令
docker run -d
--name nacos
-p 7848:7848
-p 8848:8848
-p 9848:9848
-p 9849:9849
-e MODE=cluster
-e NACOS_AUTH_ENABLE=true
-e PREFER_HOST_MODE=ip
-e NACOS_SERVER_PORT=8848
-e NACOS_SERVERS="172.16.250.93:8848 172.16.250.95:8848 172.16.250.96:8848"
-e NACOS_AUTH_TOKEN=bGVjaGVyLlMjRWElYi4tSkFhMmY2My41LVRaK0dfV0M=
-e NACOS_AUTH_IDENTITY_KEY=nacosKey
-e NACOS_AUTH_IDENTITY_VALUE=nacosValue
-e NACOS_SERVER_IP=172.16.250.95
-e SPRING_DATASOURCE_PLATFORM=mysql
-e MYSQL_SERVICE_HOST=172.16.250.84
-e MYSQL_SERVICE_PORT=3306
-e MYSQL_SERVICE_DB_NAME=nacos251
-e MYSQL_SERVICE_USER=nacos
-e MYSQL_SERVICE_PASSWORD=nacos
-e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true"
-v /data/soft/nacos/conf:/home/nacos/conf
-v /data/soft/nacos/logs:/home/nacos/logs
-v /data/soft/nacos/data:/home/nacos/data
--restart=always
--privileged=true
nacos/nacos-server:v2.5.1
nacos3(172.16.250.96)docker执行命令
docker run -d
--name nacos
-p 7848:7848
-p 8848:8848
-p 9848:9848
-p 9849:9849
-e MODE=cluster
-e NACOS_AUTH_ENABLE=true
-e PREFER_HOST_MODE=ip
-e NACOS_SERVER_PORT=8848
-e NACOS_SERVERS="172.16.250.93:8848 172.16.250.95:8848 172.16.250.96:8848"
-e NACOS_AUTH_TOKEN=bGVjaGVyLlMjRWElYi4tSkFhMmY2My41LVRaK0dfV0M=
-e NACOS_AUTH_IDENTITY_KEY=nacosKey
-e NACOS_AUTH_IDENTITY_VALUE=nacosValue
-e NACOS_SERVER_IP=172.16.250.96
-e SPRING_DATASOURCE_PLATFORM=mysql
-e MYSQL_SERVICE_HOST=172.16.250.84
-e MYSQL_SERVICE_PORT=3306
-e MYSQL_SERVICE_DB_NAME=nacos251
-e MYSQL_SERVICE_USER=nacos
-e MYSQL_SERVICE_PASSWORD=nacos
-e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true"
-v /data/soft/nacos/conf:/home/nacos/conf
-v /data/soft/nacos/logs:/home/nacos/logs
-v /data/soft/nacos/data:/home/nacos/data
--restart=always
--privileged=true
nacos/nacos-server:v2.5.1
参数说明:
-d 支持后台运行模式
-p 8848:8848 把容器内的端口8848挂载到宿主机8848上面
-p 9848:9848 把容器内的端口9848挂载到宿主机9848上面
-e NACOS_AUTH_ENABLE=true 开启 Nacos server 的注册鉴权:(需配合配置文件中 nacos.core.auth.enabled=true)
-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=8848 nacos服务端口
-e NACOS_SERVERS="172.16.250.93:8848 172.16.250.95:8848 172.16.250.96:8848"
nacos集群地址
-e SPRING_DATASOURCE_PLATFORM=mysql 以mysql为nacos做数据持久化
-e MYSQL_SERVICE_HOST=172.16.250.84 mysql地址
-e MYSQL_SERVICE_PORT=3306 mysql访问地址
-e MYSQL_SERVICE_USER=root mysql账号
-e MYSQL_SERVICE_PASSWORD=Ftprint#3548*Wtk mysql密码
-e MYSQL_SERVICE_DB_NAME=nacos_conf mysql使用库
-e MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false'
mysql常用连接参数
-e NACOS_SERVER_IP=172.16.250.93 nacos单机注册地址
-v /usr/local/software/nacos/logs:/home/nacos/logs 挂在nacos运行日志
-v /root/docker/nacos/conf 映射配置文件目录(必须提前复制容器内默认配置,否则容器无法启动)
-v /root/docker/nacos/data 持久化数据文件(配置、服务信息等)
--privileged=true 使用root权限运行容器
--restart=always 容器自动运行
--name nacos3 容器名字
nacos/nacos-server:2.5.1 使用docker镜像
注意:如果是单机版安装,可以只在1台机器上执行如下命令:
docker run -d
--name nacos
-p 7848:7848
-p 8848:8848
-p 9848:9848
-p 9849:9849
-e MODE=standalone
-e NACOS_AUTH_ENABLE=true
-e PREFER_HOST_MODE=ip
-e NACOS_SERVER_PORT=8848
-e NACOS_AUTH_TOKEN=bGVjaGVyLlMjRWElYi4tSkFhMmY2My41LVRaK0dfV0M=
-e NACOS_AUTH_IDENTITY_KEY=nacosKey
-e NACOS_AUTH_IDENTITY_VALUE=nacosValue
-e NACOS_SERVER_IP=172.16.250.96
-e SPRING_DATASOURCE_PLATFORM=mysql
-e MYSQL_SERVICE_HOST=172.16.250.84
-e MYSQL_SERVICE_PORT=3306
-e MYSQL_SERVICE_DB_NAME=nacos223
-e MYSQL_SERVICE_USER=nacos
-e MYSQL_SERVICE_PASSWORD=nacos
-e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true"
-v /data/soft/nacos/conf:/home/nacos/conf
-v /data/soft/nacos/logs:/home/nacos/logs
-v /data/soft/nacos/data:/home/nacos/data
--restart=always
--privileged=true
nacos/nacos-server:v2.2.3
3.7 查看容器运行状态
检查宿主机目录是否生成文件:
ls /root/docker/nacos/conf # 应看到 application.properties
ls /root/docker/nacos/logs # 应看到启动日志
ls /root/docker/nacos/data # 应看到数据库文件(如使用内置Derby)
![图片[3] - Spring Cloud2024.x实战 | nacos系列 | 第1篇:centos7.x下docker安装nacos2.5.1集群(3台物理机真实集群) - 宋马](https://pic.songma.com/blogimg/20250523/e006aa94b77243bf98d352a2ea99ffa3.png)
![图片[4] - Spring Cloud2024.x实战 | nacos系列 | 第1篇:centos7.x下docker安装nacos2.5.1集群(3台物理机真实集群) - 宋马](https://pic.songma.com/blogimg/20250523/d3bf884182004bc29d6d03a348bcf078.png)

访问页面查看是否运行成功:IP:8848/nacos。登录账号:nacos/nacos(正式运行的时候别忘了改密码)

4 安装nginx做nacos负载均衡
在172.16.250.92机器上安装nginx
4.1 拉取nginx镜像
docker pull nginx:1.26

4.2 创建Nginx挂载目录
大家都知道Nginx需要频繁的修改,所以将需要的文件挂载出来最合适
mkdir -p /data/soft/nginx/{
conf,html,logs}

4.3 将所需文件在容器中复制出来
因为挂载时,如果宿主机挂载目录为空,则可能会将容器中挂载的目录给覆盖。
4.3.1 先创建nginx容器
// 列出镜像
[root@192 nginx]# docker images
// 启动容器 注意 -d 镜像名称:版本
[root@192 nginx]# docker run --name nginx -d docker.io/nginx:1.26

4.3.2 获取挂载文件
mkdir -p /data/soft/nginx/{
conf,logs,html}
//将容器nginx.conf文件复制到宿主机
[root@192 nginx]# docker cp nginx:/etc/nginx/nginx.conf /data/soft/nginx/conf/nginx.conf
//将容器conf.d文件夹复制到宿主机
[root@192 nginx]# docker cp nginx:/etc/nginx/conf.d /data/soft/nginx/conf
//将容器静态文件夹html复制到宿主机
[root@192 html]# docker cp nginx:/usr/share/nginx/html/ /data/soft/nginx

4.3.3 停止并删除容器
// 停止容器,ce869a为容器id
[root@192 html]# docker stop 容器id
//删除容器
[root@192 html]# docker rm 容器id
或者直接执行下面一个命令:
[root@192 html]# docker rm -f 容器id
4.4 启动Nginx容器
docker run -d -p 80:80 -p 7848:7848 -p 8848:8848 -p 9848:9848 -p 9849:9849 --name nginx --privileged --restart always -v /data/soft/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/soft/nginx/conf/conf.d:/etc/nginx/conf.d -v /data/soft/nginx/html:/usr/share/nginx/html -v /data/soft/nginx/logs:/var/log/nginx docker.io/nginx:1.26
命令说明:
-d:后台运行
-p:将主机80端口和容器80端绑定,
–name:容器命名
–privileged:容器获得对主机上设备的直接访问权限
–restart always:设置自动昂重启
-v:挂载目录,格式 主机目录 :容器目录

4.5 测试访问

总结:
当有新的项目需要部署时,可直接操作宿主机对应的目录即可,因为容器的目录跟宿主机进行绑定了,宿主机修改,容器也会跟着修改。
4.6 添加nacos负载均衡配置
在/data/soft/nginx/conf/conf.d目录下创建nacos.conf配置文件
vim /data/soft/nginx/conf/conf.d/nacos.conf
配置内容如下:
upstream nacos8848 {
server 172.16.250.93:8848;
server 172.16.250.95:8848;
server 172.16.250.96:8848;
}
server {
listen 8848;
location / {
proxy_pass http://nacos8848;
}
location /nacos/ {
proxy_pass http://nacos8848/nacos/;
}
}
修改nginx.conf文件,在文件末尾新增如下配置:
# nacos的grpc协议配置
stream {
# 负载均衡配置(TCP长连接配置),端口号在前面的端口号前要进行偏置1000
upstream nacos9848 {
server 172.16.250.93:9848;
server 172.16.250.95:9848;
server 172.16.250.96:9848;
}
# 监听端口号在前面的端口号前要进行偏置1000
server {
listen 9848;
proxy_pass nacos9848;
}
}
重启nginx
docker restart nginx

5 测试nginx和nacos是否部署成功

nacos 集群部署成功。接下来,参阅《Spring Cloud2024.x实战 | nacos系列 | 第2篇: springcloud整合配置中心nacos2.5.1》和《Spring Cloud2024.x实战 | nacos系列 | 第3篇:springcloud整合注册中心nacos2.5.1》。



















暂无评论内容