docker安装nacos,单例模式(standalone),使用mysql数据库

前言

此处有本人写得简易版本安装,如果不考虑使用mysql可以直接用内置的derby数据库,传送门:docker部署nacos,单例模式(standalone),使用内置的derby数据库,简易安装

安装

创建文件夹

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

"假装"安装一下nacos

为什么说要假装安装一下,因为这里很多人都被坑了,首先我们要理清我们的安装思路,nacos后期版本的docker安装,是要先让nacos在不设置太多参数的情况下,直接docker run,让其生成相应的conf文件,然后把这些文件从镜像中拷贝出来,然后再进行全新的带配置的docker安装,这样才能安装出可由你配置的nacos,就是很奇怪,你如果设置了任意一个环境参数,似乎nacos在构建的时候就会优先去找配置文件,这个时候就引起了一系列的找不到文件的异常报错。

docker run -p 8848:8848 --name nacos -d nacos/nacos-server

拷贝文件夹

在经过上面“假装”安装后,生成了一些默认配置,我们现在需要做的就是将这些默认配置从镜像中拷贝出来,然后重新安装容器

docker cp nacos:/home/nacos/logs /home/docker_home/nacos/nacos-data
docker cp nacos:/home/nacos/conf /home/docker_home/nacos/nacos-data
docker cp nacos:/home/nacos/data /home/docker_home/nacos/nacos-data
  • 注意!拷贝的时候/home/docker_home/nacos/nacos-data/不要再加conf,这样会创建成/home/docker_home/nacos/nacos-data/conf/conf

删除“假装”安装的nacos容器

docker rm -f nacos

生成nacos所需的mysql表

获取mysql-schema.sql文件

去到/home/docker_home/nacos/nacos-data/conf目录下,你能找到“mysql-schema.sql”,这就是nacos依赖mysql所需要的表,不是很智能,还是只能自己多动动手了
在这里插入图片描述

创建一个mysql的schema

可以命名为nacos
在这里插入图片描述
右击,点击“运行SQL文件”
在这里插入图片描述
点击“…”,然后选择刚才下载的mysql-schema.sql
在这里插入图片描述
开始,即可生成所有mysql表
在这里插入图片描述

重新生成新的nacos容器

docker run -d \
-p 8848:8848 \
--name nacos \
--env MODE=standalone \
--env JVM_XMS=256m \
--env JVM_XMX=256m \
--env SPRING_DATASOURCE_PLATFORM=mysql \
--env MYSQL_SERVICE_HOST=127.0.0.1 \
--env MYSQL_SERVICE_PORT=3306 \
--env MYSQL_SERVICE_USER=your_username \
--env MYSQL_SERVICE_PASSWORD=your_password \
--env MYSQL_SERVICE_DB_NAME=nacos \
-v /home/docker_home/nacos/nacos-data/conf:/home/nacos/conf \
-v /home/docker_home/nacos/nacos-data/logs:/home/nacos/logs \
-v /home/docker_home/nacos/nacos-data/data:/home/nacos/data \
nacos/nacos-server
  • 如果出现cannot open directory的情况,可以添加一个参数,–privileged=true,它的主要作用扩大容器内的权限,将容器内的权限变为root权限,不加的话就是普通用户权限,但同时也会有安全性的问题,请自行考虑,我是没有开启的

制作docker-compose.yaml文件

version: ‘3.7’

services:
nacos:
image: nacos/nacos-server
container_name: nacos
environment:
- MODE=standalone
- JVM_XMS=256m
- JVM_XMX=256m
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=127.0.0.1
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=your_username
- MYSQL_SERVICE_PASSWORD=your_password
- MYSQL_SERVICE_DB_NAME=nacos
volumes:
- /home/docker_home/nacos/nacos-data/conf:/home/nacos/conf
- /home/docker_home/nacos/nacos-data/logs:/home/nacos/logs
- /home/docker_home/nacos/nacos-data/data:/home/nacos/data
ports:
- “8848:8848”
restart: always

查看网站

在浏览器中访问: http://127.0.0.1:8848/nacos
默认用户名和密码都是:nacos
记得修改
在这里插入图片描述
过来你配置的mysql数据库查看,你设置的内容已经存储在数据库了,自此实现了docker安装nacos,依赖mysql数据库的方式
在这里插入图片描述

nacos-2.0.4-mysql版本特殊安装

由于个人业务需求需要特殊安装2.0.4版本,但由于官方的2.0.4版本中,没有mysql的schema.sql文件,特此进行记录

生成mysql数据表

一个坑:“发布失败。请检查参数是否正确”

之前由于实在找不到mysql的schema.sql文件,就使用了其他版本的,就出现了问题,新的版本中有encrypted_data_key这个字段,但2.0.4版本是没有的,所以nacos在生成配置的时候总会报配置入参错误。经过一系列排查对比,发现了这个字段,在网上找个别人的schema.sql文件对比,进行导入,就正常了。特此记录

CREATE DATABASE nacos;
USE nacos;
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,
  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';

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='增加租户字段';

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 '租户字段',
  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';

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';

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';

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容量信息表';

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 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 '租户字段',
  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='多租户改造';

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');
  • 使用上面的sql导入的表,生成配置就不会报错了==“发布失败。请检查参数是否正确”==

docker-compose.yaml文件部署

.env文件

TZ=Asia/Shanghai
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=替换成实际数据库ip
MYSQL_SERVICE_PORT=替换成实际数据库端口
MYSQL_SERVICE_USER=替换成实际数据库用户名
MYSQL_SERVICE_PASSWORD=替换成实际数据库密码
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_DB_PARAM=useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8

docker-compose.yaml文件

version: "3"
services:
  nacos:
    hostname: nacos
    image: registry.cnhqd.net/nacos:2.0.4
    container_name: nacos
    privileged: true
    env_file:
      - .env
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
  • 这里使用镜像:registry.cnhqd.net/nacos:2.0.4,不使用官方标准的nacos/nacos-server:2.0.4会有奇怪报错。
  • 注意另外需要开放一下9848和9849,服务注册要使用到的

docker compose config

在准备完上面的内容后,执行以下指令docker compose config可以得到实际最终解析

services:
  nacos:
    container_name: nacos
    environment:
      MODE: standalone
      MYSQL_SERVICE_DB_NAME: nacos
      MYSQL_SERVICE_DB_PARAM: useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
      MYSQL_SERVICE_HOST: 替换成实际数据库ip
      MYSQL_SERVICE_PASSWORD: 替换成实际数据库密码
      MYSQL_SERVICE_PORT: 替换成实际数据库端口
      MYSQL_SERVICE_USER: 替换成实际数据库用户名
      SPRING_DATASOURCE_PLATFORM: mysql
      TZ: Asia/Shanghai
    hostname: nacos
    image: registry.cnhqd.net/nacos:2.0.4
    networks:
      default: null
    ports:
      - mode: ingress
        target: 8848
        published: "8848"
        protocol: tcp
      - mode: ingress
        target: 9848
        published: "9848"
        protocol: tcp
      - mode: ingress
        target: 9849
        published: "9849"
        protocol: tcp
    privileged: true
networks:
  default:
    name: docker_home_default
  • 一个不错的小技巧,可以多多应用
  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装Docker 首先需要安装 Docker,可以参考阿里云官方文档进行安装。 2. 下载Nacos镜像 使用以下命令从 Docker Hub 下载 Nacos 镜像。 docker pull nacos/nacos-server 3. 启动Nacos容器 使用以下命令启动 Nacos 容器。 docker run --name nacos -e MODE=standalone -p 8848:8848 -d nacos/nacos-server 这里使用了 -p 参数来将 Nacos 的默认端口 8848 映射到宿主机的 8848 端口上。 4. 配置MySQL 在启动 Nacos 容器后,需要进行 MySQL 数据库的配置。可以使用以下命令进入容器内部。 docker exec -it nacos /bin/sh 然后进入 conf 目录,使用 vi 命令编辑 application.properties 文件。 cd /home/nacos/nacos-server/conf vi application.properties 找到以下配置项,将其注释掉。 #spring.datasource.platform=mysql #db.num=1 #db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true #db.user=root #db.password=root 在这些配置项的下方添加以下配置,将 MySQL 数据库的地址、用户名和密码替换为实际的值。 spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://<MySQL地址>:<MySQL端口>/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=<MySQL用户名> db.password=<MySQL密码> 配置完成后,保存并退出编辑器。 5. 重启Nacos容器 使用以下命令重启 Nacos 容器,使配置生效。 docker restart nacos Nacos 容器会重新启动后,会自动将配置写入 MySQL 数据库中。 至此,Nacos 单机启动并配置 MySQL 完成。可以访问 http://localhost:8848/nacos/ 进行验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值