前提准备

版本说明

  • mysql:8.0.31

  • nacos/nacos-server:v2.2.2

  • spring-boot 2.6.13

  • spring-cloud 2021.0.5

  • spring-cloud-alibaba 2021.0.5.0

目录结构

获取 nacos 配置文件

  • 拉取镜像

    1
    docker pull nacos/nacos-server:v2.2.2
  • 启动服务(这个服务能运行就行,主要是为了拷贝文件

    1
    docker run -d --name nacos -e mode=standalone -d -p 8848:8848 nacos/nacos-server:v2.2.2
  • 从容器中复制所需文件到宿主机中

    1
    2
    3
    4
    5
    6
    7
    # docker cp 容器名:文件 宿主机文件

    # 拷贝 logs 文件
    docker cp nacos:/home/nacos/logs/ /opt/docker/nacos/

    # 拷贝 conf 文件夹
    docker cp nacos:/home/nacos/conf/ /opt/docker/nacos/
  • 停止并删除项目

    1
    docker stop nacos && docker rm nacos

启动服务

方式一

  1. 启动 mysqlnacos 服务

  2. 根据 opt/docker/nacos/conf/ 文件夹中 mysql-schema.sql,手动创建数据库表(一定要先创建表,再去访问 nacos ,否则 nacos 服务会挂掉

  3. 访问 nacos 地址

  • 创建 docker-compose.yml 文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    version: '3.8' # 对应 Docker 版本: https://docs.docker.com/compose/compose-file/compose-versioning/

    services:
    mysql:
    restart: always # 重启策略
    image: mysql:8.0.31 # 镜像名
    container_name: mysql # 容器名 (自定义)
    ports:
    - 3306:3306 # 端口号 (宿主机:容器)
    volumes: # 挂载数据卷 (先跑不挂载数据卷服务, 然后把拷贝文件到宿主机, 最后停止并删除服务, 再跑挂载数据卷服务)
    - /opt/docker/mysql/conf.d:/etc/mysql/conf.d # 配置文件夹 (宿主机:容器)
    - /opt/docker/mysql/mysql:/var/lib/mysql # 数据文件夹 (宿主机:容器)
    - /opt/docker/mysql/logs:/logs # 日志文件夹 (宿主机:容器)
    environment:
    MYSQL_ROOT_PASSWORD: 123456 # root密码 (自定义)
    TZ: Asia/Shanghai # mysql时区
    command:
    # MySQL8的密码验证方式默认是 caching_sha2_password,但是很多的连接工具还不支持该方式
    # 就需要手动设置下mysql的密码认证方式为以前的 mysql_native_password 方式
    --default-authentication-plugin=mysql_native_password
    healthcheck: # 健康检查
    test: ['CMD', 'mysqladmin', 'ping', '-h', 'localhost']
    interval: 5s
    timeout: 10s
    retries: 10
    networks: # 网络桥段
    - app # 指定在app网络桥段下网络互通

    nacos:
    restart: always # 重启策略
    image: nacos/nacos-server:v2.2.2 # 镜像名
    container_name: nacos # 容器名 (自定义)
    ports: # 端口号
    - 8848:8848
    - 9848:9848 # 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
    - 9849:9849 # 服务端gRPC请求服务端端口,用于服务间同步等
    volumes: # 挂载数据卷 (先跑不挂载数据卷服务, 然后把拷贝文件到宿主机, 最后停止并删除服务, 再跑挂载数据卷服务)
    - /opt/docker/nacos/logs/:/home/nacos/logs/ # 配置文件 (宿主机:容器)
    - /opt/docker/nacos/conf/:/home/nacos/conf/ # 数据文件夹 (宿主机:容器)
    environment:
    JVM_XMS: 256m # JVM初始堆大小 default:2g (根据服务器的内存大小来设置)
    JVM_XMX: 256m # JVM最大堆大小 default:2g (根据服务器的内存大小来设置)
    MODE: standalone # 单机启动
    PREFER_HOST_MODE: hostname # 如果支持主机名可以使用hostname,否则使用ip,默认也是ip
    SPRING_DATASOURCE_PLATFORM: mysql # 数据源平台 仅支持mysql或不保存empty
    MYSQL_SERVICE_HOST: mysql # 数据库服务地址
    MYSQL_SERVICE_DB_NAME: nacos # 数据库名称
    MYSQL_SERVICE_PORT: 3306 # 数据库端口
    MYSQL_SERVICE_USER: root # 数据库用户名
    MYSQL_SERVICE_PASSWORD: 123456 # 数据库密码
    MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
    NACOS_AUTH_ENABLE: true # 是否开启权限控制
    NACOS_AUTH_IDENTITY_KEY: 2222 # 鉴权标识
    NACOS_AUTH_IDENTITY_VALUE: 2xxx # 鉴权标识
    NACOS_AUTH_TOKEN: SecretKey012345678901234567890123456789012345678901234567890123456789
    depends_on: # 依赖项
    mysql:
    condition: service_healthy
    networks: # 网络桥段
    - app # 指定在app网络桥段下网络互通

    networks:
    app: # 使用默认配置
    name: app # 否则会多创建一个 docker_app 桥段 (可选)
  • 启动服务

    1
    2
    3
    4
    5
    # 运行 docker-compose.yml 文件
    docker-compose -f ./docker-compose.yml up -d

    # 查看服务状态
    docker ps -a
  • 创建数据库(这里是 nacos2.2.2mysql-schema.sql

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    /*
    * 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 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');

  • 默认登录账号:nacos,登录密码:nacos

  • 访问 nacos 地址:http://ip:8848/nacos/

方式二

  1. 查看 nacos-docker 中的配置,制作一个自带 nacos 数据库的 mysql 的镜像

  2. 替换掉 example/image/mysql/8/Dockerfile 文件中的 mysql-schema.sql 路径,改为 nacos-db.sql

  3. 访问 nacos 地址

  • 创建 Dockerfile 文件,注意替换链接。先找到自己对应版本的 nacos-db.sql 文件,然后直接点击 Raw 按钮,即可获取到源码链接

    1
    2
    3
    4
    5
    6
    FROM mysql:8.0.31
    # ADD https://raw.githubusercontent.com/alibaba/nacos/develop/distribution/conf/mysql-schema.sql /docker-entrypoint-initdb.d/nacos-mysql.sql
    ADD https://raw.githubusercontent.com/alibaba/nacos/2.2.2/config/src/main/resources/META-INF/nacos-db.sql /docker-entrypoint-initdb.d/nacos-mysql.sql
    RUN chown -R mysql:mysql /docker-entrypoint-initdb.d/nacos-mysql.sql
    EXPOSE 3306
    CMD ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
  • 创建 docker-compose.yml 文件,并引入上面的 Dockerfile

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    version: '3.8' # 对应 Docker 版本: https://docs.docker.com/compose/compose-file/compose-versioning/

    services:
    mysql:
    restart: always # 重启策略
    container_name: mysql # 容器名 (自定义)
    build: # 构建镜像
    context: ./mysql/ # 镜像路径
    dockerfile: Dockerfile # 镜像名称
    image: my/mysql:8.0.31 # 镜像名
    ports:
    - 3306:3306 # 端口号 (宿主机:容器)
    volumes: # 挂载数据卷
    - /opt/docker/mysql/conf.d:/etc/mysql/conf.d # 配置文件夹 (宿主机:容器)
    - /opt/docker/mysql/mysql:/var/lib/mysql # 数据文件夹 (宿主机:容器)
    - /opt/docker/mysql/logs:/logs # 日志文件夹 (宿主机:容器)
    environment:
    MYSQL_ROOT_PASSWORD: 123456 # root密码 (自定义)
    TZ: Asia/Shanghai # mysql时区
    MYSQL_DATABASE: nacos # 初始化数据库 nacos
    MYSQL_USER: nacos # nacos 数据库用户名
    MYSQL_PASSWORD: nacos # nacos 数据库用户密码
    LANG: C.UTF-8 # nacos 数据库语言
    healthcheck: # 健康检查
    test: ['CMD', 'mysqladmin', 'ping', '-h', 'localhost']
    interval: 5s
    timeout: 10s
    retries: 10
    networks: # 网络桥段
    - app # 指定在app网络桥段下网络互通

    nacos:
    restart: always # 重启策略
    image: nacos/nacos-server:v2.2.2 # 镜像名
    container_name: nacos # 容器名 (自定义)
    ports: # 端口号
    - 8848:8848
    - 9848:9848 # 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
    - 9849:9849 # 服务端gRPC请求服务端端口,用于服务间同步等
    volumes: # 挂载数据卷
    - /opt/docker/nacos/logs/:/home/nacos/logs/ # 配置文件 (宿主机:容器)
    - /opt/docker/nacos/conf/:/home/nacos/conf/ # 数据文件夹 (宿主机:容器)
    environment:
    JVM_XMS: 256m # JVM初始堆大小 default:2g (根据服务器的内存大小来设置)
    JVM_XMX: 256m # JVM最大堆大小 default:2g (根据服务器的内存大小来设置)
    MODE: standalone # 单机启动
    PREFER_HOST_MODE: hostname # 如果支持主机名可以使用hostname,否则使用ip,默认也是ip
    SPRING_DATASOURCE_PLATFORM: mysql # 数据源平台 仅支持mysql或不保存empty
    MYSQL_SERVICE_HOST: mysql # 数据库服务地址
    MYSQL_SERVICE_DB_NAME: nacos # 数据库名称
    MYSQL_SERVICE_PORT: 3306 # 数据库端口
    MYSQL_SERVICE_USER: root # 数据库用户名
    MYSQL_SERVICE_PASSWORD: 123456 # 数据库密码
    MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
    NACOS_AUTH_ENABLE: true # 是否开启权限控制
    NACOS_AUTH_IDENTITY_KEY: 2222 # 鉴权标识
    NACOS_AUTH_IDENTITY_VALUE: 2xxx # 鉴权标识
    NACOS_AUTH_TOKEN: SecretKey012345678901234567890123456789012345678901234567890123456789
    depends_on: # 依赖项
    mysql:
    condition: service_healthy
    networks: # 网络桥段
    - app # 指定在app网络桥段下网络互通

    networks:
    app: # 使用默认配置
    name: app # 否则会多创建一个 docker_app 桥段 (可选)

  • 启动服务

    1
    2
    3
    4
    5
    6
    7
    8
    # 运行 docker-compose.yml 文件
    docker-compose -f ./docker-compose.yml up -d

    # 查看镜像
    docker images

    # 查看服务状态
    docker ps -a
  • 默认登录账号:nacos,登录密码:nacos

  • 访问 nacos 地址:http://ip:8848/nacos/