需要两个容器Nacos容器和MySQL容器,MySQL容器专注数据存储,Nacos容器专注服务发现/配置管理
准备工作
- 确保已安装Docker Desktop for Windows
- 确保已启用WSL 2(推荐)或Hyper-V
- 确保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秒),执行以下步骤:
下载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
执行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. 验证部署
- 等待约30秒让服务启动
- 打开浏览器访问: http://localhost:8848/nacos
- 使用默认账号登录:
- 用户名: 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
注意事项
生产环境建议:
- 使用更高版本的MySQL(如8.0)
- 修改默认密码
- 配置集群模式而非单机模式
- 配置持久化卷存储数据
如果需要持久化存储:
# 为MySQL添加数据卷 -v mysql_data:/var/lib/mysql # 为Nacos添加配置卷 -v nacos_config:/home/nacos/conf
如果遇到端口冲突,可以修改映射端口,如:
-p 8849:8848 # 将主机端口改为8849
在Windows防火墙中确保放行了8848和3306端口
如需更高性能,可以调整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