Docker Compose 部署 Nacos
Nacos 作为阿里巴巴开源的服务发现和配置管理平台,在微服务架构中扮演着重要角色。使用 Docker Compose 部署 Nacos 可以简化安装过程,提高部署效率。以下是详细的部署指南:
一、环境准备
在开始部署 Nacos 之前,需要确保系统满足以下要求:
硬件要求:
- 至少 4GB RAM(推荐 8GB 或更多)
- 至少 2 个 CPU 核心
- 至少 5GB 硬盘空间
软件要求:
- Docker 19.03 或更高版本
- Docker Compose 1.25 或更高版本
安装 Docker 和 Docker Compose(如未安装):
bash# 在Ubuntu上安装 sudo apt-get update sudo apt-get install -y docker.io sudo systemctl start docker sudo systemctl enable docker sudo apt-get install -y docker-compose
二、单机模式部署
基本单机部署
创建项目目录并进入:
bashmkdir nacos-docker && cd nacos-docker
创建
docker-compose.yml
文件,内容如下:yamlversion: "3" services: nacos: image: nacos/nacos-server:latest container_name: nacos environment: - MODE=standalone # 单机模式 ports: - "8848:8848" # Web控制台端口 - "9848:9848" # gRPC通信端口(Nacos 2.0+需要) volumes: - ./data:/home/nacos/data # 数据持久化 - ./logs:/home/nacos/logs # 日志持久化 restart: always
启动 Nacos 服务:
bashdocker-compose up -d
验证部署: 访问
http://localhost:8848/nacos
,默认用户名/密码为nacos/nacos
带 MySQL 持久化的单机部署
对于生产环境,建议配置 MySQL 作为持久化存储:
yaml
version: "3.9"
services:
nacos:
image: nacos/nacos-server:v2.3.0
container_name: nacos
environment:
MODE: standalone
SPRING_DATASOURCE_PLATFORM: mysql
MYSQL_SERVICE_HOST: db_mysql
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_USER: nacos_user
MYSQL_SERVICE_PASSWORD: nacos_passwd
MYSQL_SERVICE_DB_NAME: nacos_config
ports:
- "8848:8848"
- "9848:9848"
volumes:
- ./conf:/home/nacos/conf
- ./logs:/home/nacos/logs
depends_on:
- db_mysql
networks:
- nacos_network
db_mysql:
image: mysql:5.7.30
container_name: mysql_for_nacos
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: nacos_config
MYSQL_USER: nacos_user
MYSQL_PASSWORD: nacos_passwd
ports:
- "3306:3306"
volumes:
- ./data/mysql:/var/lib/mysql
networks:
- nacos_network
networks:
nacos_network:
三、集群模式部署
对于生产环境,建议使用集群模式提高可用性:
基础集群配置
yaml
version: "3"
services:
nacos1:
image: nacos/nacos-server:v2.5.0
container_name: nacos-server-1
hostname: nacos-server-1
environment:
- PREFER_HOST_MODE=hostname
- MODE=cluster
- NACOS_SERVERS=nacos-server-1:8848,nacos-server-2:8848,nacos-server-3:8848
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=mysql
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=123456
volumes:
- ./cluster/nacos1/logs:/home/nacos/logs
- ./cluster/nacos1/data:/home/nacos/data
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
nacos2:
image: nacos/nacos-server:v2.5.0
container_name: nacos-server-2
hostname: nacos-server-2
environment:
- PREFER_HOST_MODE=hostname
- MODE=cluster
- NACOS_SERVERS=nacos-server-1:8848,nacos-server-2:8848,nacos-server-3:8848
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=mysql
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=123456
volumes:
- ./cluster/nacos2/logs:/home/nacos/logs
- ./cluster/nacos2/data:/home/nacos/data
ports:
- "8849:8848"
- "9849:9848"
- "9850:9849"
nacos3:
image: nacos/nacos-server:v2.5.0
container_name: nacos-server-3
hostname: nacos-server-3
environment:
- PREFER_HOST_MODE=hostname
- MODE=cluster
- NACOS_SERVERS=nacos-server-1:8848,nacos-server-2:8848,nacos-server-3:8848
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=mysql
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=123456
volumes:
- ./cluster/nacos3/logs:/home/nacos/logs
- ./cluster/nacos3/data:/home/nacos/data
ports:
- "8850:8848"
- "9851:9848"
- "9852:9849"
带 Nginx 负载均衡的集群配置
yaml
version: "3"
networks:
nacos:
ipam:
driver: default
config:
- subnet: "172.22.0.0/24"
services:
nginx:
image: nginx:1.21.1
container_name: nacos-nginx
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf
ports:
- "8880:8880"
networks:
nacos:
ipv4_address: 172.22.0.80
depends_on:
- nacos-server-1
nacos-server-1:
image: nacos/nacos-server:2.0.3
container_name: nacos-server-1
hostname: nacos-server-1
env_file:
- ./env/nacos-hostname.env
environment:
- NACOS_SERVERS=nacos-server-1:8848,nacos-server-2:8848,nacos-server-3:8848
- PREFER_HOST_MODE=hostname
ports:
- "7848:7848"
- "8848:8848"
- "9848:9848"
- "9849:9849"
- "9555:9555"
networks:
nacos:
ipv4_address: 172.22.0.11
depends_on:
- nacos-server-2
mem_limit: 2000m
四、安全配置
开启鉴权功能
在 Nacos 2.x 版本中,可以通过以下环境变量开启鉴权:
yaml
environment:
- NACOS_AUTH_ENABLE=true
- NACOS_AUTH_TOKEN=base64编码的32位密钥
- NACOS_AUTH_TOKEN_EXPIRE_SECONDS=18000
- NACOS_AUTH_IDENTITY_KEY=nacos
- NACOS_AUTH_IDENTITY_VALUE=自定义值
生成密钥的方法:
bash
# 生成32位密钥
openssl rand -hex 32
# 再进行base64编码
五、常见问题与优化
常见问题解决
Nacos 服务未能启动:
- 检查
docker-compose.yml
中的环境变量设置是否正确,特别是MODE
参数
- 检查
端口被占用:
- 使用
netstat -tulnp | grep 8848
查看端口占用情况 - 修改
docker-compose.yml
中的端口映射
- 使用
数据库连接失败:
- 确保数据库容器正在运行
- 检查网络配置是否正确
性能优化
JVM 参数调整:
yamlenvironment: - JVM_XMS=512m # 初始堆内存 - JVM_XMX=1024m # 最大堆内存 - JVM_XMN=256m # 年轻代大小
数据库优化:
- 配置连接池参数
- 优化 SQL 查询
资源限制:
yamldeploy: resources: limits: cpus: "2" memory: 2G
六、版本选择建议
- 生产环境建议使用特定版本而非
latest
标签 - Nacos 2.0+版本需要额外开放 9848 端口用于 gRPC 通信
- 不同版本可能有不同的兼容性要求,建议参考官方文档
通过以上步骤,您可以轻松地在各种环境中部署 Nacos 服务。根据实际需求选择合适的部署模式,并注意做好安全配置和性能优化。