Nacos 是阿里巴巴开源的一个服务发现和配置管理的平台, 致力于帮助您发现、配置和管理微服务。
Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:
Kubernetes Service
gRPC & Dubbo RPC Service
Spring Cloud RESTful Service
Nacos 的关键特性包括:
服务注册与发现:Nacos 支持将服务注册到其注册表中,并允许其他服务通过服务名称来发现和调用这些服务。这有助于实现服务之间的解耦和动态伸缩。
动态配置服务:Nacos 提供了集中式的配置管理功能,可以存储服务的配置信息,如连接字符串、端口号、参数等。服务可以在启动时从 Nacos 获取配置,并在运行时动态更新配置。
服务健康检查:Nacos 可以定期检查服务的健康状态,以确保服务可用。如果服务出现故障,Nacos 可以及时将故障信息通知给其他服务。
动态 DNS 服务:动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。
服务及其元数据管理:
通过使用 Nacos,Spring Cloud 应用可以更轻松地实现服务的注册、发现、配置管理和健康检查,提高了应用的可维护性和可靠性。
更多内容参见官网:什么是 Nacos
在上面的官网链接其实有详细的介绍关于如何来安装:
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
这样运行以后的数据是留在这个docker容器内的,如果进行了一些配置在,在容器重启以后会丢失。
如果采用数据库配置的方式要多增加一步数据库的配置。
在mysql中建立nacos_config数据库,然后去github上复制初始化的SQL脚本执行。
github.comhttps://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');
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
在最后命令结束时回车执行。
启动完成以后,和单机版一样,访问url:localhost:8848开启访问:
(我这里shell脚本启动时配置了port:8849,所以是用8849访问)
我们在节点列表中能看到当前节点的信息
我们在命名空间中创建一个dev空间,
然后在数据库应该能看到有一条新记录:
2.2.3以下版本在左边菜单中会有一个权限管理菜单,在下面可以直接修改密码和管理用户。
高版本取消了,需要自行开启(官方认为nacos需要在安全环境中运行,不可暴露到公共网络,所以默认没有开启鉴权)。
docker run --env PREFER_HOST_MODE=hostname --env MODE=standalone --env NACOS_AUTH_ENABLE=true -p 8848:8848 nacos/nacos-server
更多的配置参考:Authorization (nacos.io)
完整命令:
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成功的)
*********************************************************************
由于通过启动参数方式配置失败,所以我按照非官方镜像的方法进行了尝试。去修改nacos的配置文件。
由于我们是docker运行,要去修改这个配置文件的话,在下次启动时还是会丢失。所以我们可以采用先将这个配置文件存到宿主机,然后通过-v的方式映射过去。
文件路径: /home/nacos/conf/application.properties
先进入容器内部:
# docker exec -it nacos bash
复制命令:
# docker cp /home/nacos/conf/application.properties application.properties
-- 将容器nacos中的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
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
注意:这里面的用户名密码默认都是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 thanapplication.properties
fileReference 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 : noneNACOS_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/**
为了方便维护,我自己是写了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