> 技术文档 > Docker三分钟部署Nacos:带持久化的保姆级教程(避坑指南)_docker nacos

Docker三分钟部署Nacos:带持久化的保姆级教程(避坑指南)_docker nacos


背景:为什么我选择 Docker 安装 Nacos?

我最近在学习Spring Cloud,但又不想在自己的电脑上安装Nacos,一是怕占了太多本地资源,二是感觉在服务器上用Docker来装Nacos会更方便、快捷。这样不仅能让我更熟悉服务器的操作,还能让我对Docker的使用更加熟练。于是,我决定在服务器上用Docker来安装Nacos,以及常用到的的MySql、Redis、Rabbitmq、kafka,没想到整个过程真的非常顺利,还让我对Spring Cloud的开发环境搭建有了新的认识。这个方式不仅能节省时间,还能让我更熟悉服务器部署流程,顺便练习 Docker 技能,一举多得!

前置知识(图解版)

#mermaid-svg-fbCd0qRzsdXiNnU9 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fbCd0qRzsdXiNnU9 .error-icon{fill:#552222;}#mermaid-svg-fbCd0qRzsdXiNnU9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fbCd0qRzsdXiNnU9 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-fbCd0qRzsdXiNnU9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fbCd0qRzsdXiNnU9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fbCd0qRzsdXiNnU9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fbCd0qRzsdXiNnU9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fbCd0qRzsdXiNnU9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fbCd0qRzsdXiNnU9 .marker.cross{stroke:#333333;}#mermaid-svg-fbCd0qRzsdXiNnU9 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fbCd0qRzsdXiNnU9 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-fbCd0qRzsdXiNnU9 .cluster-label text{fill:#333;}#mermaid-svg-fbCd0qRzsdXiNnU9 .cluster-label span{color:#333;}#mermaid-svg-fbCd0qRzsdXiNnU9 .label text,#mermaid-svg-fbCd0qRzsdXiNnU9 span{fill:#333;color:#333;}#mermaid-svg-fbCd0qRzsdXiNnU9 .node rect,#mermaid-svg-fbCd0qRzsdXiNnU9 .node circle,#mermaid-svg-fbCd0qRzsdXiNnU9 .node ellipse,#mermaid-svg-fbCd0qRzsdXiNnU9 .node polygon,#mermaid-svg-fbCd0qRzsdXiNnU9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fbCd0qRzsdXiNnU9 .node .label{text-align:center;}#mermaid-svg-fbCd0qRzsdXiNnU9 .node.clickable{cursor:pointer;}#mermaid-svg-fbCd0qRzsdXiNnU9 .arrowheadPath{fill:#333333;}#mermaid-svg-fbCd0qRzsdXiNnU9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fbCd0qRzsdXiNnU9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fbCd0qRzsdXiNnU9 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-fbCd0qRzsdXiNnU9 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-fbCd0qRzsdXiNnU9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fbCd0qRzsdXiNnU9 .cluster text{fill:#333;}#mermaid-svg-fbCd0qRzsdXiNnU9 .cluster span{color:#333;}#mermaid-svg-fbCd0qRzsdXiNnU9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fbCd0qRzsdXiNnU9 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}包含连接存储挂载Docker容器Nacos服务MySQL数据库配置数据宿主机目录

一、什么是Docker和Nacos

Docker

Docker是一个容器化平台,允许开发者将应用程序及其依赖打包到轻量级、可移植的容器中。其核心功能包括:

  • 容器化技术:利用Linux内核的cgroups和namespaces实现资源隔离,确保应用在不同环境中运行一致性。
  • 快速部署与跨平台支持:容器镜像可在任何支持Docker的环境中运行,简化开发、测试到生产的全流程。
  • 轻量级与高效性:相比传统虚拟机,容器共享主机操作系统内核,启动更快且资源占用更低。

典型应用场景包括本地开发环境搭建、持续集成/持续部署(CI/CD)及分布式应用部署。


Nacos

Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的服务发现与配置管理平台,专为云原生和微服务架构设计。其核心功能包括:

  • 服务发现与健康监测:支持基于DNS或RPC的服务注册与发现,并提供实时健康检查,确保服务可用性。
  • 动态配置管理:集中化管理应用配置,支持配置版本跟踪、灰度发布和一键回滚,避免因配置变更导致的服务重启。
  • 动态DNS与流量管理:通过权重路由实现负载均衡,支持中间层流量控制。

在微服务架构中,Nacos作为基础设施,帮助实现服务间的通信协调、配置动态更新及服务元数据管理,提升系统弹性和可维护性

二、拉取Nacos镜像

  1. 打开终端(Windows上是命令提示符或PowerShell,Mac和Linux上是Terminal)。

  2. 输入下面的命令来拉取Nacos的镜像:

    docker pull nacos/nacos-server:v2.1.1

    这个命令就是从Docker Hub上把Nacos镜像给拉下来,版本号是v2.1.1。拉取速度看你的网速,可能要等一会儿。

    Docker三分钟部署Nacos:带持久化的保姆级教程(避坑指南)_docker nacos

三、创建目录

为了能让Nacos持久化存储数据,要先在本地创建几个目录放配置文件、日志和数据。在终端里输下面的命令:

mkdir -p /data/nacos/{conf,logs,data}

这条命令是在/data/nacos/下面创建三个文件夹:conf(放配置文件)、logs(放日志文件)和data(放数据)。mkdir -p是说如果路径不存在就创建,{conf,logs,data}是同时建这三个文件夹的快捷方式。

Docker三分钟部署Nacos:带持久化的保姆级教程(避坑指南)_docker nacos

四、创建Nacos容器

  1. 先用下面的命令创建一个Nacos容器:

    docker run -p 8848:8848 --name nacos -d nacos/nacos-server:v2.1.1

    这里-p 8848:8848是把容器的8848端口映射到你电脑的8848端口,这样以后就能通过localhost:8848访问Nacos了。--name nacos是给这个容器起名字,方便后续操作。-d是让容器在后台运行。

  2. 把容器里的配置文件、日志文件和数据文件拷贝到刚才创建的目录里:

    docker cp nacos:/home/nacos/conf /data/nacosdocker cp nacos:/home/nacos/data /data/nacosdocker cp nacos:/home/nacos/logs /data/nacos
  3. 接着,给这些目录授权,让Nacos能读写它们:

    chmod 777 /data/nacos/{conf,logs,data}
  4. 最后,把刚才创建的临时容器删掉:

    docker rm -f nacos

五、创建Nacos数据持久化数据库

要让Nacos能持久化存配置信息,得先建一个MySQL数据库。要是还没装MySQL,就去MySQL官网看文档安装。

  1. 登录到MySQL数据库,创建一个叫nacos的数据库:

    CREATE DATABASE nacos;
  2. 然后,运行下面的SQL语句创建Nacos需要的表结构:

/* Navicat Premium Data Transfer Source Server : 宁波服务器 Source Server Type : MySQL Source Server Version : 50744 Source Host  : 114.66.52.217:3306 Source Schema : nacos Target Server Type : MySQL Target Server Version : 50744 File Encoding : 65001 Date: 30/05/2025 08:32:16*/SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for config_info-- ----------------------------DROP TABLE IF EXISTS `config_info`;CREATE TABLE `config_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT \'id\', `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'data_id\', `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'content\', `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT \'md5\', `gmt_create` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'创建时间\', `gmt_modified` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'修改时间\', `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT \'source user\', `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT \'source ip\', `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT \'\' COMMENT \'租户字段\', `c_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `c_use` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `effect` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `c_schema` text CHARACTER SET utf8 COLLATE utf8_bin NULL, `encrypted_data_key` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT \'秘钥\', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_configinfo_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = \'config_info\' ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of config_info-- ------------------------------ ------------------------------ Table structure for config_info_aggr-- ----------------------------DROP TABLE IF EXISTS `config_info_aggr`;CREATE TABLE `config_info_aggr` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT \'id\', `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'data_id\', `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'group_id\', `datum_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'datum_id\', `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'内容\', `gmt_modified` datetime NULL DEFAULT NULL COMMENT \'修改时间\', `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT \'\' COMMENT \'租户字段\', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_configinfoaggr_datagrouptenantdatum`(`data_id`, `group_id`, `tenant_id`, `datum_id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = \'增加租户字段\' ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of config_info_aggr-- ------------------------------ ------------------------------ Table structure for config_info_beta-- ----------------------------DROP TABLE IF EXISTS `config_info_beta`;CREATE TABLE `config_info_beta` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT \'id\', `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'data_id\', `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'group_id\', `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT \'app_name\', `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'content\', `beta_ips` varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT \'betaIps\', `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT \'md5\', `gmt_create` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'创建时间\', `gmt_modified` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'修改时间\', `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT \'source user\', `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT \'source ip\', `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT \'\' COMMENT \'租户字段\', `encrypted_data_key` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT \'秘钥\', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_configinfobeta_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = \'config_info_beta\' ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of config_info_beta-- ------------------------------ ------------------------------ Table structure for config_info_tag-- ----------------------------DROP TABLE IF EXISTS `config_info_tag`;CREATE TABLE `config_info_tag` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT \'id\', `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'data_id\', `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'group_id\', `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT \'\' COMMENT \'tenant_id\', `tag_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'tag_id\', `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT \'app_name\', `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'content\', `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT \'md5\', `gmt_create` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'创建时间\', `gmt_modified` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'修改时间\', `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT \'source user\', `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT \'source ip\', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_configinfotag_datagrouptenanttag`(`data_id`, `group_id`, `tenant_id`, `tag_id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = \'config_info_tag\' ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of config_info_tag-- ------------------------------ ------------------------------ Table structure for config_tags_relation-- ----------------------------DROP TABLE IF EXISTS `config_tags_relation`;CREATE TABLE `config_tags_relation` ( `id` bigint(20) NOT NULL COMMENT \'id\', `tag_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'tag_name\', `tag_type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT \'tag_type\', `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'data_id\', `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'group_id\', `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT \'\' COMMENT \'tenant_id\', `nid` bigint(20) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`nid`) USING BTREE, UNIQUE INDEX `uk_configtagrelation_configidtag`(`id`, `tag_name`, `tag_type`) USING BTREE, INDEX `idx_tenant_id`(`tenant_id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = \'config_tag_relation\' ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of config_tags_relation-- ------------------------------ ------------------------------ Table structure for group_capacity-- ----------------------------DROP TABLE IF EXISTS `group_capacity`;CREATE TABLE `group_capacity` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT \'主键ID\', `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin 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 NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'创建时间\', `gmt_modified` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'修改时间\', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_group_id`(`group_id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = \'集群、各Group容量信息表\' ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of group_capacity-- ------------------------------ ------------------------------ Table structure for his_config_info-- ----------------------------DROP TABLE IF EXISTS `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) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT \'app_name\', `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `gmt_create` datetime NULL DEFAULT CURRENT_TIMESTAMP, `gmt_modified` datetime NULL DEFAULT CURRENT_TIMESTAMP, `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL, `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `op_type` char(10) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT \'\' COMMENT \'租户字段\', `encrypted_data_key` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT \'秘钥\', PRIMARY KEY (`nid`) USING BTREE, INDEX `idx_gmt_create`(`gmt_create`) USING BTREE, INDEX `idx_gmt_modified`(`gmt_modified`) USING BTREE, INDEX `idx_did`(`data_id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = \'多租户改造\' ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of his_config_info-- ------------------------------ ------------------------------ Table structure for permissions-- ----------------------------DROP TABLE IF EXISTS `permissions`;CREATE TABLE `permissions` ( `role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `resource` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `action` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, UNIQUE INDEX `uk_role_permission`(`role`, `resource`, `action`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of permissions-- ------------------------------ ------------------------------ Table structure for roles-- ----------------------------DROP TABLE IF EXISTS `roles`;CREATE TABLE `roles` ( `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, UNIQUE INDEX `idx_user_role`(`username`, `role`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of roles-- ----------------------------INSERT INTO `roles` VALUES (\'nacos\', \'ROLE_ADMIN\');-- ------------------------------ Table structure for tenant_capacity-- ----------------------------DROP TABLE IF EXISTS `tenant_capacity`;CREATE TABLE `tenant_capacity` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT \'主键ID\', `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin 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 NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'创建时间\', `gmt_modified` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'修改时间\', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_tenant_id`(`tenant_id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = \'租户容量信息表\' ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of tenant_capacity-- ------------------------------ ------------------------------ Table structure for tenant_info-- ----------------------------DROP TABLE IF EXISTS `tenant_info`;CREATE TABLE `tenant_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT \'id\', `kp` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT \'kp\', `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT \'\' COMMENT \'tenant_id\', `tenant_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT \'\' COMMENT \'tenant_name\', `tenant_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT \'tenant_desc\', `create_source` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT \'create_source\', `gmt_create` bigint(20) NULL DEFAULT NULL COMMENT \'创建时间\', `gmt_modified` bigint(20) NULL DEFAULT NULL COMMENT \'修改时间\', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_tenant_info_kptenantid`(`kp`, `tenant_id`) USING BTREE, INDEX `idx_tenant_id`(`tenant_id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = \'tenant_info\' ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of tenant_info-- ------------------------------ ------------------------------ Table structure for users-- ----------------------------DROP TABLE IF EXISTS `users`;CREATE TABLE `users` ( `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `password` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `enabled` tinyint(1) NOT NULL, PRIMARY KEY (`username`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;-- ------------------------------ Records of users-- ----------------------------INSERT INTO `users` VALUES (\'nacos\', \'$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu\', 1);SET FOREIGN_KEY_CHECKS = 1;

Docker三分钟部署Nacos:带持久化的保姆级教程(避坑指南)_docker nacos

六、启动Nacos容器

现在,有了配置文件、日志文件、数据文件和数据库,可以启动Nacos容器了。在终端里输入下面的命令:

docker run -d \\-e MODE=standalone \\--privileged=true \\-e SPRING_DATASOURCE_PLATFORM=mysql \\-e MYSQL_SERVICE_HOST=你的MySQL服务器IP \\-e MYSQL_SERVICE_PORT=3306 \\-e MYSQL_SERVICE_USER=你的MySQL用户名 \\-e MYSQL_SERVICE_PASSWORD=你的MySQL密码 \\-e MYSQL_SERVICE_DB_NAME=nacos \\-e TIME_ZONE=\'Asia/Shanghai\' \\-e NACOS_AUTH_ENABLE=true \\-v /data/nacos/logs:/home/nacos/logs \\-v /data/nacos/data:/home/nacos/data \\-v /data/nacos/conf:/home/nacos/conf \\-p 8848:8848 -p 9848:9848 -p 9849:9849 \\--name nacos --restart=always nacos/nacos-server:v2.1.1

这个命令有点长,不过它做了好多重要的事:

  • -e后面是环境变量,用来配置Nacos的各种参数,比如连接MySQL数据库的信息、时区、是否启用认证等。

  • -v后面是挂载卷,把之前创建的本地目录挂载到容器里,这样Nacos就能用它们存数据了。

  • -p后面是端口映射,让Nacos的端口能被外部访问。

  • --name nacos是给这个容器起名字。

  • --restart=always是说如果容器意外退出,Docker会自动重启它。

    Docker三分钟部署Nacos:带持久化的保姆级教程(避坑指南)_docker nacos

七、查看Nacos启动日志

在终端里输入下面的命令来看Nacos的启动日志:

docker logs -f nacos

这个命令会实时显示Nacos容器的日志输出,你可以通过看日志来判断Nacos是不是启动成功了。要是看到“Nacos is starting…”这样的提示,就说明Nacos正在启动;要是看到“Nacos is started…”这样的提示,就说明Nacos已经成功启动了。

Docker三分钟部署Nacos:带持久化的保姆级教程(避坑指南)_docker nacos

八、访问Nacos控制台

打开你的浏览器,输入下面的地址:

http://localhost:8848/nacos/

要是你是装在别的电脑上,就把localhost换成那台电脑的IP地址。

进入Nacos控制台的登录页面后,用默认的账号和密码nacos登录。登录成功后,你就能看到Nacos的控制台界面了,在这里你可以进行各种配置和管理操作。

Docker三分钟部署Nacos:带持久化的保姆级教程(避坑指南)_docker nacos

Docker三分钟部署Nacos:带持久化的保姆级教程(避坑指南)_docker nacos

九、总结

经过上面的步骤,你已经成功用Docker装好了Nacos。虽然过程看起来有点复杂,但只要跟着步骤一步步来,其实很简单。现在,你可以开始用Nacos来管你的微服务应用了。要是安装过程中遇到问题,可以去相关社区找找答案,或者参考一些教程。
💡 建议收藏本教程,以后搭建环境再也不用头大!如果你在安装过程中遇到问题,欢迎在评论区留言或私信我,一起交流学习!