在Windows下使用Docker部署Nacos注册中心(基于MySQL容器)

发布于:2025-04-02 ⋅ 阅读:(21) ⋅ 点赞:(0)

需要两个容器Nacos容器和MySQL容器,MySQL容器专注数据存储,Nacos容器专注服务发现/配置管理

准备工作

  1. 确保已安装Docker Desktop for Windows
  2. 确保已启用WSL 2(推荐)或Hyper-V
  3. 确保Docker服务正在运行

部署步骤

1. 拉取所需镜像

# 拉取MySQL镜像(这里使用5.7版本作为示例)
docker pull mysql:5.7

# 拉取Nacos镜像(使用最新稳定版)
docker pull nacos/nacos-server:latest

2. 创建专用网络(可选但推荐)

docker network create nacos_network

3. 启动MySQL容器

docker run -d --name nacos-mysql `
    --network nacos_network `
    -p 3306:3306 `
    -e MYSQL_ROOT_PASSWORD=root `
    -e MYSQL_DATABASE=nacos `
    -e MYSQL_USER=nacos `
    -e MYSQL_PASSWORD=nacos `
    mysql:5.7

4. 初始化Nacos数据库

等待MySQL容器启动后(约30秒),执行以下步骤:

  1. 下载Nacos的SQL脚本:

    • 从GitHub下载: https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql
    • 或者直接从容器中获取(如果你已经拉取了nacos镜像):
      docker run --rm nacos/nacos-server cat /home/nacos/conf/mysql-schema.sql > mysql-schema.sql
      
  2. 执行SQL脚本初始化数据库:

# 将SQL文件复制到容器中
docker cp mysql-schema.sql nacos-mysql:/tmp/mysql-schema.sql

# 在容器中执行SQL脚本
docker exec -it nacos-mysql bash -c "mysql -uroot -proot nacos < /tmp/mysql-schema.sql"

5. 启动Nacos容器

docker run -d --name nacos-server `
    --network nacos_network `
    -p 8848:8848 `
    -e MODE=standalone `
    -e SPRING_DATASOURCE_PLATFORM=mysql `
    -e MYSQL_SERVICE_HOST=nacos-mysql `
    -e MYSQL_SERVICE_PORT=3306 `
    -e MYSQL_SERVICE_USER=nacos `
    -e MYSQL_SERVICE_PASSWORD=nacos `
    -e MYSQL_SERVICE_DB_NAME=nacos `
    -e NACOS_AUTH_ENABLE=true `
    -e NACOS_AUTH_TOKEN_EXPIRE_SECONDS=18000 `
    -e NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 `
    -e NACOS_AUTH_CACHE_ENABLE=true `
    -e JVM_XMS=512m `
    -e JVM_XMX=512m `
    nacos/nacos-server

6. 验证部署

  1. 等待约30秒让服务启动
  2. 打开浏览器访问: http://localhost:8848/nacos
  3. 使用默认账号登录:
    • 用户名: nacos
    • 密码: nacos

常用管理命令

# 查看Nacos日志
docker logs -f nacos-server

# 停止Nacos服务
docker stop nacos-server

# 启动Nacos服务
docker start nacos-server

# 重启Nacos服务
docker restart nacos-server

# 删除所有容器(谨慎使用)
docker rm -f nacos-server nacos-mysql

注意事项

  1. 生产环境建议:

    • 使用更高版本的MySQL(如8.0)
    • 修改默认密码
    • 配置集群模式而非单机模式
    • 配置持久化卷存储数据
  2. 如果需要持久化存储:

    # 为MySQL添加数据卷
    -v mysql_data:/var/lib/mysql
    
    # 为Nacos添加配置卷
    -v nacos_config:/home/nacos/conf
    
  3. 如果遇到端口冲突,可以修改映射端口,如:

    -p 8849:8848  # 将主机端口改为8849
    
  4. 在Windows防火墙中确保放行了8848和3306端口

  5. 如需更高性能,可以调整JVM参数:

    -e JVM_XMS=1g -e JVM_XMX=1g
    

标题分开两个独立容器

Nacos容器和MySQL容器是分开的两个独立容器,这种设计是微服务架构中的常见做法,具有以下特点:

1. 容器分离的好处

  • 职责单一:MySQL容器专注数据存储,Nacos容器专注服务发现/配置管理
  • 独立扩展:可以单独升级或扩展其中任一服务
  • 资源隔离:故障和资源竞争互不影响
  • 安全性:数据库可部署在内网,Nacos对外暴露

2. 连接方式

虽然物理分离,但通过以下方式保持通信:

--network nacos_network  # 使两容器共享同一网络
-e MYSQL_SERVICE_HOST=nacos-mysql  # Nacos通过容器名访问MySQL

3. 验证连接状态

可以通过以下命令检查:

# 进入Nacos容器
docker exec -it nacos-server bash

# 测试MySQL连接(在容器内执行)
ping nacos-mysql  # 应能解析IP
telnet nacos-mysql 3306  # 检查端口连通性

4. 替代方案对比

方案 特点 适用场景
分容器(当前方案) 需要管理多个容器,但灵活性高 开发/生产环境
单容器多进程 部署简单但违背容器最佳实践 快速测试
Docker Compose 简化多容器管理 推荐开发环境使用

如果需要更简单的管理,可以使用Docker Compose来编排这两个容器(示例docker-compose.yml):

version: '3'
services:
  mysql:
    image: mysql:5.7
    container_name: nacos-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: nacos
      MYSQL_USER: nacos
      MYSQL_PASSWORD: nacos
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - nacos_net

  nacos:
    image: nacos/nacos-server
    container_name: nacos-server
    depends_on:
      - mysql
    environment:
      MODE: standalone
      SPRING_DATASOURCE_PLATFORM: mysql
      MYSQL_SERVICE_HOST: mysql  # 使用service名作为host
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: nacos
      MYSQL_SERVICE_PASSWORD: nacos
      MYSQL_SERVICE_DB_NAME: nacos
    ports:
      - "8848:8848"
    networks:
      - nacos_net

volumes:
  mysql_data:

networks:
  nacos_net:
    driver: bridge

启动命令:

docker-compose up -d

网站公告

今日签到

点亮在社区的每一天
去签到