«

Docker安装nacos

Sun 发布于 阅读:195 docker


1、查看有那些nacos镜像
docker search nacos
2、获取指定版本的镜像
docker pull nacos/nacos-server:v2.2.1
3、查看本地镜像
docker images
4、创建nacos配置文件挂载目录
mkdir -p /www/wwwroot/changjing/docker/nacos/conf
5、创建nacos日志文件挂载目录
mkdir -p /www/wwwroot/changjing/docker/nacos/logs
6、创建nacos数据文件挂载目录
mkdir -p /www/wwwroot/changjing/docker/nacos/data
7、启动nacos容器
docker run --name nacos -d -p 8848:8848 -e MODE=standalone nacos/nacos-server:v2.2.1

docker run -d :启动容器, -d 表示后台启动并返回容器id
–name nacos :容器名称为nacos
-p 8848:8848 :容器相关端口号,“:”前为宿主机访问启动容器端口号,“:”后为容器端口号
-e MODE=standalone : 以单机版启动
nacos/nacos-server:v2.2.1 :启动容器的nacos镜像

8、复制容器的相关文件到挂载目录
docker cp nacos:/home/nacos/conf/ /www/wwwroot/changjing/docker/nacos
9、复制容器日志文件到宿主机
docker cp nacos:/home/nacos/logs/ /www/wwwroot/changjing/docker/nacos
10、复制容器数据文件到宿主机
docker cp nacos:/home/nacos/data/ /www/wwwroot/changjing/docker/nacos
五、将nacos修改为以mysql存储信息
1、将nacos相关数据库导入到宿主机的mysql中
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 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,
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 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',
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 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',
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 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容量信息表';

/**/
/ 数据库全名 = nacos_config /
/ 表名称 = his_config_info /
/**/
CREATE TABLE his_config_info (
id bigint(20) 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 CURRENT_TIMESTAMP,
gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
src_user text,
src_ip varchar(50) 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 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,
password varchar(500) NOT NULL,
enabled boolean NOT NULL
);

CREATE TABLE roles (
username varchar(50) NOT NULL,
role varchar(50) NOT NULL,
UNIQUE INDEX idx_user_role (username ASC, role ASC) USING BTREE
);

CREATE TABLE permissions (
role varchar(50) NOT NULL,
resource varchar(255) NOT NULL,
action varchar(8) NOT NULL,
UNIQUE INDEX uk_role_permission (role,resource,action) USING BTREE
);

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

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

2、修改配置文件
(1)、备份配置文件
cp application.properties application_bk.properties
(2)、修改前

spring

server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_APPLICATION_PORT:8848}
server.tomcat.accesslog.max-days=30
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}

default current work dir

server.tomcat.basedir=file:.

Config Module Related Configurations

Deprecated configuration property, it is recommended to use spring.sql.init.platform replaced.

spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:}

spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${MYSQL_DATABASE_NUM:1}
db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
db.user.0=${MYSQL_SERVICE_USER}
db.password.0=${MYSQL_SERVICE_PASSWORD}

The auth system to use, currently only 'nacos' and 'ldap' is supported:

nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}

worked when nacos.core.auth.system.type=nacos

The token expiration in seconds:

nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}

The default token:

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}
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE}

spring security config

turn off security

nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,//*.css,/*/.js,//*.html,//*.map,/*/.svg,//*.png,/*/.ico,/console-fe/public/,/v1/auth/,/v1/console/health/,/actuator/,/v1/console/server/**}

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
(3)、修改后(里面有很多踩坑的解决办法,初次安装nacos建议不要跳过)

spring

server.servlet.contextPath=/nacos
server.contextPath=/nacos
server.port=8848

server.tomcat.accesslog.max-days=30

server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i

server.tomcat.accesslog.enabled=false

default current work dir

server.tomcat.basedir=file:.

Config Module Related Configurations

Deprecated configuration property, it is recommended to use spring.sql.init.platform replaced.

spring.datasource.platform=mysql
spring.sql.init.platform=mysql
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=1

这里必须为公网或服务器内网地址,我这里是服务器的内网地址,容器内部没有mysql,绝对不能使用 127.0.0.1和localhost

如果nacos启动失败,Nacos Server did not start because dumpservice bean construction failure : No DataSource set

加上 &serverTimezone=UTC ,再不行就加上 &allowPublicKeyRetrieval=true

将connectTimeout 和 socketTimeout 分别加个0,避免出现超时异常

db.url.0=jdbc:mysql://公网或服务器内网地址:3306/cj-config?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false
db.user.0=root
db.password.0=123456

The auth system to use, currently only 'nacos' and 'ldap' is supported:

鉴权类型,默认为nacos

nacos.core.auth.system.type=nacos

是否开启鉴权功能,默认为false

nacos.core.auth.enabled=true

Base64加密前密码 TcmxJw05k$-_zcx.)8EtFC^D^F1W!IPr

Base64加密后密码 VGNteEp3MDVrJC1femN4Lik4RXRGQ15EXkYxVyFJUHI=

加密网站:https://www.qqxiuzi.cn/bianma/base64.htm

自定义密钥,在自定义密钥时,推荐将配置项设置为Base64编码的字符串,且原始密钥长度不得低于32字符。同nacos.core.auth.plugin.nacos.token.secret.key

nacos.core.auth.default.token.secret.key=VGNteEp3MDVrJC1femN4Lik4RXRGQ15EXkYxVyFJUHI=

worked when nacos.core.auth.system.type=nacos

The token expiration in seconds:

用户登陆临时accessToken的过期时间,默认18000

nacos.core.auth.plugin.nacos.token.expire.seconds=18000

The default token:

默认鉴权插件用于生成用户登陆临时accessToken所使用的密钥,在2.2.0.1后无默认值,必须执行此变更,否则无法启动;其他版本为建议设置。

nacos.core.auth.plugin.nacos.token.secret.key=VGNteEp3MDVrJC1femN4Lik4RXRGQ15EXkYxVyFJUHI=

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}

关闭使用user-agent判断服务端请求并放行鉴权的功能

nacos.core.auth.enable.userAgentAuthWhite=false

用于替换useragent白名单的身份识别key,不可为空,2.2.1后无默认值

nacos.core.auth.server.identity.key=nacosKey

用于替换useragent白名单的身份识别value,不可为空,2.2.1后无默认值

nacos.core.auth.server.identity.value=nacosValue

spring security config

turn off security

nacos.security.ignore.urls=/,/error,//*.css,/*/.js,//*.html,//*.map,/*/.svg,//*.png,/*/.ico,/console-fe/public/,/v1/auth/,/v1/console/health/,/actuator/,/v1/console/server/**

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
docker run -d --name nacos \
--ip 0.0.0.0 \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--env MODE=standalone \
--env NACOS_AUTH_ENABLE=true \
-v /www/wwwroot/changjing/docker/nacos/conf/:/home/nacos/conf \
-v /www/wwwroot/changjing/docker/nacos/logs:/home/nacos/logs \
-v /www/wwwroot/changjing/docker/nacos/data:/home/nacos/data \
nacos/nacos-server:v2.2.1

nacos2.0.0以上的版本需要开启鉴权,详情看这里:

docker rm -f nacos