Docker 单机与集群部署指南:Nacos2.2.0 实践手册

一、环境准备与前置条件

1.1 硬件与软件要求

Nacos2.2.0对硬件资源的要求取决于部署模式:单机模式下建议配置4核CPU、8GB内存;集群模式需根据节点数量扩展资源,每节点建议2核CPU、4GB内存。操作系统需支持Docker,推荐CentOS 7+/Ubuntu 20.04+。Docker版本需≥20.10,可通过docker version验证。

网络配置方面,单机部署仅需开放8848(默认服务端口)和9848(集群通信端口);集群模式需确保所有节点间网络互通,建议配置防火墙规则仅允许节点间通信。存储方面,Nacos默认使用嵌入式数据库Derby,生产环境建议替换为MySQL 5.7+,需提前创建数据库并导入nacos-mysql.sql脚本。

1.2 Docker与镜像准备

从Docker Hub拉取官方Nacos镜像:

  1. docker pull nacos/nacos-server:v2.2.0

或使用阿里云镜像加速:

  1. docker pull registry.cn-hangzhou.aliyuncs.com/nacos-docker/nacos-server:v2.2.0

验证镜像完整性:

  1. docker inspect nacos/nacos-server:v2.2.0 | grep "RepoDigests"

二、单机部署方案

2.1 基础单机部署

使用docker run快速启动:

  1. docker run -d \
  2. --name nacos-standalone \
  3. -p 8848:8848 \
  4. -e MODE=standalone \
  5. -e PREFER_HOST_MODE=hostname \
  6. nacos/nacos-server:v2.2.0

关键参数说明:

  • MODE=standalone:强制单机模式
  • PREFER_HOST_MODE=hostname:使用主机名作为服务标识
  • -p 8848:8848:端口映射

验证部署:访问http://<主机IP>:8848/nacos,登录默认账号nacos/nacos

2.2 持久化存储配置

单机模式下建议配置数据持久化,避免容器重启导致数据丢失。创建本地目录并挂载:

  1. mkdir -p /data/nacos/standalone-logs
  2. docker run -d \
  3. --name nacos-standalone-persistent \
  4. -p 8848:8848 \
  5. -v /data/nacos/standalone-logs:/home/nacos/logs \
  6. -e MODE=standalone \
  7. nacos/nacos-server:v2.2.0

2.3 数据库集成

生产环境建议使用外部MySQL数据库。创建数据库后,修改启动命令:

  1. docker run -d \
  2. --name nacos-mysql \
  3. -p 8848:8848 \
  4. -e MODE=standalone \
  5. -e SPRING_DATASOURCE_PLATFORM=mysql \
  6. -e MYSQL_SERVICE_HOST=<MySQL_IP> \
  7. -e MYSQL_SERVICE_PORT=3306 \
  8. -e MYSQL_SERVICE_DB_NAME=nacos \
  9. -e MYSQL_SERVICE_USER=root \
  10. -e MYSQL_SERVICE_PASSWORD=<密码> \
  11. nacos/nacos-server:v2.2.0

三、集群部署方案

3.1 集群架构设计

Nacos2.2.0集群建议3节点起步,采用AP模式(默认)或CP模式(需配置nacos.core.protocol.raft.data.id=1)。节点间通过Gossip协议通信,需确保:

  • 所有节点时间同步(NTP服务)
  • 网络延迟<100ms
  • 节点IP不可变

3.2 Docker Compose集群部署

创建docker-compose.yml文件:

  1. version: '3'
  2. services:
  3. nacos1:
  4. image: nacos/nacos-server:v2.2.0
  5. container_name: nacos1
  6. environment:
  7. - MODE=cluster
  8. - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
  9. - NACOS_APPLICATION_PORT=8848
  10. - PREFER_HOST_MODE=ip
  11. volumes:
  12. - ./nacos1-logs:/home/nacos/logs
  13. ports:
  14. - "8848:8848"
  15. extra_hosts:
  16. - "nacos1:<IP1>"
  17. - "nacos2:<IP2>"
  18. - "nacos3:<IP3>"
  19. nacos2:
  20. image: nacos/nacos-server:v2.2.0
  21. # 类似配置nacos2和nacos3

启动集群:

  1. docker-compose up -d

3.3 Kubernetes集群部署

对于K8s环境,创建StatefulSet:

  1. apiVersion: apps/v1
  2. kind: StatefulSet
  3. metadata:
  4. name: nacos
  5. spec:
  6. serviceName: nacos-headless
  7. replicas: 3
  8. selector:
  9. matchLabels:
  10. app: nacos
  11. template:
  12. metadata:
  13. labels:
  14. app: nacos
  15. spec:
  16. containers:
  17. - name: nacos
  18. image: nacos/nacos-server:v2.2.0
  19. env:
  20. - name: MODE
  21. value: "cluster"
  22. - name: NACOS_SERVERS
  23. value: "nacos-0.nacos-headless.default.svc.cluster.local:8848 nacos-1.nacos-headless.default.svc.cluster.local:8848 nacos-2.nacos-headless.default.svc.cluster.local:8848"
  24. ports:
  25. - containerPort: 8848
  26. name: server

四、高级配置与优化

4.1 JVM参数调优

通过环境变量调整JVM参数:

  1. docker run -d \
  2. --name nacos-jvm-tuned \
  3. -e JVM_XMS=2g \
  4. -e JVM_XMX=2g \
  5. -e JVM_XMN=1g \
  6. nacos/nacos-server:v2.2.0

4.2 监控集成

集成Prometheus监控:

  1. docker run -d \
  2. --name nacos-prometheus \
  3. -p 8848:8848 \
  4. -p 9848:9848 \
  5. -e MODE=standalone \
  6. -e NACOS_PROMETHEUS_ENDPOINT=true \
  7. nacos/nacos-server:v2.2.0

4.3 常见问题排查

  1. 集群无法同步:检查/home/nacos/logs/nacos.log中的Raft日志
  2. 端口冲突:确保8848、9848、7848端口未被占用
  3. 数据库连接失败:验证MySQL权限及网络连通性

五、最佳实践建议

  1. 备份策略:定期备份/home/nacos/data目录
  2. 升级路径:先升级从节点,再升级主节点
  3. 性能基准:单机模式QPS约3000,集群模式线性扩展

通过本文的详细指导,开发者可快速完成Nacos2.2.0的Docker化部署,并根据实际需求选择单机或集群方案。建议生产环境采用集群模式并配置监控告警,确保服务高可用。