springCloud 的nacos docker安装

一、Nacos的作用

Nacos 是阿里巴巴开源的一个服务发现和配置管理的平台, 致力于帮助您发现、配置和管理微服务。

Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:

Kubernetes Service

gRPC & Dubbo RPC Service

Spring Cloud RESTful Service

Nacos 的关键特性包括:

  1. 服务注册与发现:Nacos 支持将服务注册到其注册表中,并允许其他服务通过服务名称来发现和调用这些服务。这有助于实现服务之间的解耦和动态伸缩。

  2. 动态配置服务:Nacos 提供了集中式的配置管理功能,可以存储服务的配置信息,如连接字符串、端口号、参数等。服务可以在启动时从 Nacos 获取配置,并在运行时动态更新配置。

  3. 服务健康检查:Nacos 可以定期检查服务的健康状态,以确保服务可用。如果服务出现故障,Nacos 可以及时将故障信息通知给其他服务。

  4. 动态 DNS 服务:动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。

  5. 服务及其元数据管理:

通过使用 Nacos,Spring Cloud 应用可以更轻松地实现服务的注册、发现、配置管理和健康检查,提高了应用的可维护性和可靠性。

更多内容参见官网:什么是 Nacos

 二、内存版Nacos的docker安装

在上面的官网链接其实有详细的介绍关于如何来安装:

springCloud 的nacos docker安装_第1张图片

如果是内存版运行,其实只要一条命令就行:

docker run --rm -d --name nacos -p 8848:8848 -e MODE=standalone -e TIME_ZONE="Asia/Shanghai" nacos/nacos-server

通过上面的docker run命令,就运行了nacos实例 ,并开放8848端口(如果没有下载会自动下载镜像)。

成功以后,就可以打开url进行配置了:localhost:8848/nacos

springCloud 的nacos docker安装_第2张图片

这样运行以后的数据是留在这个docker容器内的,如果进行了一些配置在,在容器重启以后会丢失。

三、使用数据库版nacos,用docker安装部署

 如果采用数据库配置的方式要多增加一步数据库的配置。

1、建立nacos所需要的数据库并执行初始化脚本

在mysql中建立nacos_config数据库,然后去github上复制初始化的SQL脚本执行。

github.comicon-default.png?t=N7T8https://github.com/alibaba/nacos/raw/master/config/src/main/resources/META-INF/nacos-db.sql为了方便,我复制了一下,供大家直接使用:

/*
 * 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.
 */

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) DEFAULT NULL,
  `c_use` varchar(64) DEFAULT NULL,
  `effect` varchar(64) DEFAULT NULL,
  `type` varchar(64) DEFAULT NULL,
  `c_schema` text,
  `encrypted_data_key` text NOT NULL 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';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `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',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '密钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `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',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_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 '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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,
  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';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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 '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(64) unsigned NOT NULL,
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255) NOT NULL,
  `group_id` varchar(128) NOT NULL,
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL,
  `md5` varchar(32) DEFAULT NULL,
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  `src_user` text,
  `src_ip` varchar(20) DEFAULT NULL,
  `op_type` char(10) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '密钥',
  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='多租户改造';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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 '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' 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,
	password varchar(500) NOT NULL,
	enabled boolean NOT NULL
);

CREATE TABLE roles (
	username varchar(50) NOT NULL,
	role varchar(50) NOT NULL,
	constraint uk_username_role UNIQUE (username,role)
);

CREATE TABLE permissions (
    role varchar(50) NOT NULL,
    resource varchar(512) NOT NULL,
    action varchar(8) NOT NULL,
    constraint uk_role_permission UNIQUE (role,resource,action)
);

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

 2、docker启动时增加数据库的配置

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=121.43.61.119 \
-e MYSQL_SERVICE_PORT=23306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD='2wD$EYL(' \
-p 8848:8848 \
--name nacos \
--rm \
nacos/nacos-server

注意:上面这些要进行实际参数的替换哦。 

上面 \ 表示换行。如docker ps -a的命令,也可以换行执行

docker \

ps \

-a

在最后命令结束时回车执行。 

springCloud 的nacos docker安装_第3张图片

 3、访问8848端口,查看管理界面

启动完成以后,和单机版一样,访问url:localhost:8848开启访问:

(我这里shell脚本启动时配置了port:8849,所以是用8849访问)

springCloud 的nacos docker安装_第4张图片

我们在节点列表中能看到当前节点的信息

springCloud 的nacos docker安装_第5张图片

4、验证一下数据库配置是否生效。

我们在命名空间中创建一个dev空间,

springCloud 的nacos docker安装_第6张图片

然后在数据库应该能看到有一条新记录:

 springCloud 的nacos docker安装_第7张图片

四、nacos开启鉴权及用户登陆

2.2.3以下版本在左边菜单中会有一个权限管理菜单,在下面可以直接修改密码和管理用户。

springCloud 的nacos docker安装_第8张图片

高版本取消了,需要自行开启(官方认为nacos需要在安全环境中运行,不可暴露到公共网络,所以默认没有开启鉴权)。

1、如果用的官方docker镜像,可以在启动时加参数配置

docker run --env PREFER_HOST_MODE=hostname --env MODE=standalone --env NACOS_AUTH_ENABLE=true -p 8848:8848 nacos/nacos-server

更多的配置参考:Authorization (nacos.io)

springCloud 的nacos docker安装_第9张图片

完整命令:

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=127.0.0.1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD='2wD$EY(' \
-e NACOS_CORE.AUTH.ENABLED=true -e NACOS_CORE.AUTH.USERNAME=nacos -e NACOS_CORE.AUTH.PASSWORD=123456 \
-e NACOS.CORE.AUTH.SERVER.IDENTITY.KEY=serverIdentity -e NACOS.CORE.AUTH.SERVER.IDENTITY.VALUE=security \
-e NACOS.CORE.AUTH.PLUGIN.NACOS.TOKEN.SECRET.KEY=SecretKey012345678901234567890123456789012345678901234567890123456789 \
-p 8848:8848 \
--name nacos \
--rm \
nacos/nacos-server

 ****************我按照官方示例文档进行配置,发现未成功!**********

 按照上面的方法设置了NACOS_CORE.AUTH.ENABLED=true以及NACOS_AUTH_ENABLE=true仍然未成功开启用户登陆。我也不知道是什么原因,试了多次未成功。(网友们可以自行验证是否成功,我后面是改用下面的修改application.properties成功的)

*********************************************************************

2、非官方docker镜像可以修改 application.properties

由于通过启动参数方式配置失败,所以我按照非官方镜像的方法进行了尝试。去修改nacos的配置文件。

由于我们是docker运行,要去修改这个配置文件的话,在下次启动时还是会丢失。所以我们可以采用先将这个配置文件存到宿主机,然后通过-v的方式映射过去。

1)先在无鉴权的方式下,去docker容器内获取这个文件。

文件路径: /home/nacos/conf/application.properties

springCloud 的nacos docker安装_第10张图片

先进入容器内部:

#  docker exec -it nacos bash

复制命令:

# docker cp /home/nacos/conf/application.properties application.properties

-- 将容器nacos中的application.properties复制到宿主机的当前目录下

 2)修改配置文件的参数(application.properties)

# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.console.ui.enabled=true
nacos.core.param.check.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
nacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=123456

3) 启动时,通过-v 映射到容器内去即可生效

docker run --rm -it --name  nacos \
    -v ./application.properties:/home/nacos/conf/application.properties \
    -p 8848:8848 -e MODE=standalone -e TIME_ZONE="Asia/Shanghai" \
    -e SPRING_DATASOURCE_PLATFORM=mysql \
    -e MYSQL_SERVICE_HOST=121.43.61.110 \
    -e MYSQL_SERVICE_PORT=3306 \
    -e MYSQL_SERVICE_DB_NAME=nacos_config 
    -e MYSQL_SERVICE_USER=root 
    -e MYSQL_SERVICE_PASSWORD='2wD$EYL(' \
    nacos/nacos-server

springCloud 的nacos docker安装_第11张图片

注意:这里面的用户名密码默认都是nacos。

3、登陆以后,通过菜单权限控制去修改用户和密码

springCloud 的nacos docker安装_第12张图片

五、nacos 官方镜像的其他配置说明

如果你想个性化配置更多的nacos,我想你可能需要去关注下面这段话中的几个文件。

If the above property configuration list does not meet your requirements, you can mount the custom.properties file into the /home/nacos/init.d/ directory of the container, where the spring properties can be configured, and the priority is higher than application.properties file

Reference example: cluster-hostname.yaml

由于hub.docker.com在国内无法打开。我把它上面的写的配置参数转载一下,方便大家了解

name description option
MODE cluster/standalone cluster/standalone default cluster
NACOS_SERVERS nacos cluster address eg. ip1:port1 ip2:port2 ip3:port3
PREFER_HOST_MODE Whether hostname are supported hostname/ip default ip
NACOS_APPLICATION_PORT nacos server port default 8848
NACOS_SERVER_IP custom nacos server ip when network was mutil-network
SPRING_DATASOURCE_PLATFORM standalone support mysql mysql / empty default empty
MYSQL_SERVICE_HOST mysql host
MYSQL_SERVICE_PORT mysql database port default : 3306
MYSQL_SERVICE_DB_NAME mysql database name
MYSQL_SERVICE_USER username of database
MYSQL_SERVICE_PASSWORD password of database
MYSQL_DATABASE_NUM It indicates the number of database default :1
MYSQL_SERVICE_DB_PARAM Database url parameter default : characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
JVM_XMS -Xms default :1g
JVM_XMX -Xmx default :1g
JVM_XMN -Xmn default :512m
JVM_MS -XX:MetaspaceSize default :128m
JVM_MMS -XX:MaxMetaspaceSize default :320m
NACOS_DEBUG enable remote debug y/n default :n
TOMCAT_ACCESSLOG_ENABLED server.tomcat.accesslog.enabled default :false
NACOS_AUTH_SYSTEM_TYPE The auth system to use, currently only 'nacos' is supported default :nacos
NACOS_AUTH_ENABLE If turn on auth system default :false
NACOS_AUTH_TOKEN_EXPIRE_SECONDS The token expiration in seconds default :18000
NACOS_AUTH_TOKEN The default token default :SecretKey012345678901234567890123456789012345678901234567890123456789
NACOS_AUTH_CACHE_ENABLE Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay. default : false
MEMBER_LIST Set the cluster list with a configuration file or command-line argument eg:192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809
EMBEDDED_STORAGE Use embedded storage in cluster mode without mysql embedded default : none
NACOS_AUTH_CACHE_ENABLE nacos.core.auth.caching.enabled default : false
NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE nacos.core.auth.enable.userAgentAuthWhite default : false
NACOS_AUTH_IDENTITY_KEY nacos.core.auth.server.identity.key default : serverIdentity
NACOS_AUTH_IDENTITY_VALUE nacos.core.auth.server.identity.value default : security
NACOS_SECURITY_IGNORE_URLS nacos.security.ignore.urls default : /,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**

六、docker容器的shell启动脚本

为了方便维护,我自己是写了shell脚本,用于启动、停止等管理,方便复制和转发。

可以这样启动:sh nacos_mysql_service.sh start

这是一个通用docker服务脚本如下:

#!/bin/sh
# 本脚本为docker服务的脚本。采用的run命令启动。不是采用Dockerfile构建镜像的方式运行
#
## 调用示例:sudo sh XXX.sh start
## 由于脚本内用了sudo方法,原则上执行脚本必须用root或sudo运行。
## 本脚本接受1个参数,可以是start、stop,分别执行启动和停止。启动前会强制停止服务再启动。
## 原则上一个容器就跑一个服务。特殊的要单独写脚本。
## 
## 定义变量,尽量把所有要配置的变量都在开头配置
DIR_PROJECT=/opt/dockerShare/nacos
ACTION=$1;
HPORT=8849; #宿主机 容器的PORT
DPORT=8848; #Docker 容器的PORT
IMAGENAME='nacos/nacos-server';  # 这是要运行的镜像名字。如果不存在,需要先通过sudo docker pull $IMAGENAME 获取。***如果存在tags要带上,比如redis:6.2。
CTNNAME='nacos'; # CTNNAME = CONTAINER NAME
## nacos 配置为单机模式,在重启docker以后,会重置nacos服务。需要重新去配置服务。生产环境,需要将配置改成数据库连接。
# 容器内的变量
##
# 容器启动命令
STARTCMD='';  # docker自启动,不需要启动
## 
## 开始处理
echo $ACTION' 服务处理中...';
##
## shell没有提权设计,子函数一定要定义在主流程前,否则会报command not found
## stop子函数。shell规定,函数不需要定义入参,直接传即可。用$1,$2这样的格式接收
##
function to_stop(){
    CTNID=$(sudo docker ps -aqf "name=$CTNNAME");
    # stop 以前,先检查是否有启动。有启动再停止
    # -n 表示非空
    # echo $CTNID;
    if [ -n "$CTNID" ]; then  #[ ]前后一定要有空格,否则会报错];中间不能有空格
        sudo docker stop $CTNNAME;
        # 停止成功
        # sudo docker rm $CTNNAME;  # docker run 加了 --rm 选项后,是不保留的,所以会直接rm。不需要再手动rm
        echo $CTNNAME'stop OK!'
        return 0; # shell 约定函数只能返回数字0-255,0表示成功
    else
        echo $CTNNAME' not running,dont to stop';
        return 1;
    fi;
}
##
## 主流程,根据入参执行
##
if [ -z "$ACTION" ]; then
    # -z 表示判断变量是否为空,如果是空会返回true
    echo "you can input args start or stop,eg:sudo sh xx.sh start";echo "--nothing to do!";
elif [ $ACTION =  "start" ];then # 如果是start表示启动。
    STOPVALUE=$(to_stop); # 启动前,为了防止错误,默认都是先停止再重启,不用restart。
    # echo $STOPVALUE;	
	# docker run -d --name nacos -e MODE=standalone -p 8848:8848 nacos/nacos-server
	sudo docker run --rm -d --name  $CTNNAME \
	-v ./application.properties:/home/nacos/conf/application.properties \
	-p $HPORT:$DPORT -e MODE=standalone -e TIME_ZONE="Asia/Shanghai" \
	-e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=127.0.0.1 -e MYSQL_SERVICE_PORT=3306 \
	-e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD='2wD$EYL' \
	$IMAGENAME $STARTCMD;
    CTNID=$(sudo docker ps -aqf "name=$CTNNAME");
    if [ -n "$CTNID" ]; then
	echo $CTNNAME' 启动成功,id:'$CTNID
    else
	echo $CTNNAME' null,启动失败了';
    fi;
elif [ $ACTION = 'stop' ]; then
     # stop 以前,先检查是否有启动。有启动再停止
    if to_stop ; then
        echo $CTNNAME' stop finish!';
    else
        echo '未找到容器'$CTNNAME',运行结束';
    fi;
else
	echo "only support start and stop,you can input args start or stop,eg:sudo sh xx.sh start";echo "--nothing to do!";
fi;

# 启动以后要去查看管理员初始密码。cat jenkins_home/secrets/initialAdminPassword
# e5a39e15107d4278a110eb9355a72ba1



你可能感兴趣的:(SpringCloud微服务,spring,cloud,java,spring)