本文介绍如何在docker容器下安装部署nacos最新版本2.2.0。

一、单机本地配置

1.1 拉取nacos镜像

执行以下命令从docker远端拉取nacos镜像文件。

docker pull nacos/nacos-server

1.2 启动nacos镜像

执行以下命令,以单机模式启动nacos镜像。

docker run -d --name nacos -p 8848:8848 -e PREFER_HOST_MODE=hostname -e MODE=standalone nacos/nacos-server

1.3 验证nacos是否启动成功

执行以下命令,查看容器是否启动成功。

docker ps -a

1.4 访问nacos管理页面

至此,nacos服务已经成功启动,通过访问地址:http:XXXX//:8848/nacos打开管理端页面。默认账号:nacos,密码:nacos。

二、单机模式支持mysql

通过以上方式是可以简单快捷的启动并使用nacos了,但nacos中的所有数据都会保存在容器内部。倘若容器迁移则nacos源数据则不复存在,所以通常我们通常会将nacos的数据保存在mysql中。

2.1 准备mysql数据库

mysql数据库的版本要求:5.6.5+。推荐5.7版本。安装好mysql数据库后,创建表nacos_config。

2.2 初始化数据库nacos_config

在nacos的安装文件夹conf目下,找到nacos-mysql.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(255) 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(255) 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');

运行后自动创建如下表结构,其中config_info用来存储配置中心的配置信息。

2.3 创建nacos配置文件

在宿主机创建nacos配置文件application.props。内容如下:

## Copyright 1999-2021 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.##*************** Spring Boot Related Configurations ***************#### Default web context path:server.servlet.contextPath=/nacos### Include message fieldserver.error.include-message=ON_PARAM### Default web server port:server.port=8848#*************** Network Related Configurations ***************#### If prefer hostname over ip for Nacos server addresses in cluster.conf:# nacos.inetutils.prefer-hostname-over-ip=false### Specify local server's IP:# nacos.inetutils.ip-address=#*************** Config Module Related Configurations ***************#### If use MySQL as datasource:spring.datasource.platform=mysql### Count of DB:db.num=1### Connect URL of DB:db.url.0=jdbc:mysql://127.0.0.1:3308/nacos_config" />

找到配置文件的如下内容处,取消掉前边的注释#标识,同时修改数据库配置信息为自己的实际配置信息,主要是修改数据库访问账号和密码。

2.4 运行nacos镜像

执行以下命令运行nacos镜像,同时映射本地配置文件。

docker run -d -e MODE=standalone -e PREFER_HOST_MODE=hostname -e JVM_XMS=256m -e JVM_XMX=256m -p 8848:8848 -p 7848:7848 -p 9848:9848 -p 9849:9849 -v /mnt/docker_data/nacos/conf/application.properties:/home/nacos/conf/application.properties --name nacos nacos/nacos-server

2.5 测试验证

在浏览器中打开http://XXXX:8848/nacos打开nacos管理页面,在配置管理-配置列表添加配置信息。添加完毕后,打开mysql数据库中的config_info表,如果表中保存了新添加的配置信息,说明配置成功,数据保存到数据库了。


新时代农民工