Docker部署Nacos服务注册与配置中心实战 1. 项目概述Nacos作为阿里巴巴开源的动态服务发现、配置管理和服务管理平台已经成为云原生架构中不可或缺的基础组件。本文将详细介绍如何在Docker环境中部署Nacos服务注册与配置中心并结合MySQL实现数据持久化。2. 环境准备2.1 基础环境要求Docker 20.10.0Docker Compose 1.29.0MySQL 5.7/8.0至少2GB可用内存2.2 网络配置建议确保Docker主机可以访问外网以下载镜像同时建议为容器创建专用网络docker network create nacos_network3. MySQL容器部署3.1 启动MySQL容器docker run -d \ --name nacos-mysql \ --network nacos_network \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORDnacos \ -e MYSQL_DATABASEnacos \ -e MYSQL_USERnacos \ -e MYSQL_PASSWORDnacos \ -v /data/mysql:/var/lib/mysql \ mysql:8.03.2 初始化Nacos数据库从Nacos GitHub仓库获取初始化SQL脚本wget https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql docker exec -i nacos-mysql mysql -uroot -pnacos nacos mysql-schema.sql4. Nacos服务部署4.1 单机模式部署docker run -d \ --name nacos-standalone \ --network nacos_network \ -p 8848:8848 \ -e MODEstandalone \ -e SPRING_DATASOURCE_PLATFORMmysql \ -e MYSQL_SERVICE_HOSTnacos-mysql \ -e MYSQL_SERVICE_PORT3306 \ -e MYSQL_SERVICE_USERnacos \ -e MYSQL_SERVICE_PASSWORDnacos \ -e MYSQL_SERVICE_DB_NAMEnacos \ -e NACOS_AUTH_ENABLEtrue \ nacos/nacos-server:2.2.34.2 集群模式部署创建docker-compose.yml文件version: 3 services: nacos1: image: nacos/nacos-server:2.2.3 container_name: nacos1 ports: - 8848:8848 - 9848:9848 environment: - MODEcluster - SPRING_DATASOURCE_PLATFORMmysql - MYSQL_SERVICE_HOSTnacos-mysql - MYSQL_SERVICE_PORT3306 - MYSQL_SERVICE_USERnacos - MYSQL_SERVICE_PASSWORDnacos - MYSQL_SERVICE_DB_NAMEnacos - NACOS_SERVERSnacos1:8848 nacos2:8848 nacos3:8848 - NACOS_AUTH_ENABLEtrue networks: - nacos_network nacos2: image: nacos/nacos-server:2.2.3 container_name: nacos2 ports: - 8849:8848 - 9849:9848 environment: - MODEcluster - SPRING_DATASOURCE_PLATFORMmysql - MYSQL_SERVICE_HOSTnacos-mysql - MYSQL_SERVICE_PORT3306 - MYSQL_SERVICE_USERnacos - MYSQL_SERVICE_PASSWORDnacos - MYSQL_SERVICE_DB_NAMEnacos - NACOS_SERVERSnacos1:8848 nacos2:8848 nacos3:8848 - NACOS_AUTH_ENABLEtrue networks: - nacos_network nacos3: image: nacos/nacos-server:2.2.3 container_name: nacos3 ports: - 8850:8848 - 9850:9848 environment: - MODEcluster - SPRING_DATASOURCE_PLATFORMmysql - MYSQL_SERVICE_HOSTnacos-mysql - MYSQL_SERVICE_PORT3306 - MYSQL_SERVICE_USERnacos - MYSQL_SERVICE_PASSWORDnacos - MYSQL_SERVICE_DB_NAMEnacos - NACOS_SERVERSnacos1:8848 nacos2:8848 nacos3:8848 - NACOS_AUTH_ENABLEtrue networks: - nacos_network networks: nacos_network: external: true5. 安全配置5.1 认证配置在application.properties中配置nacos.core.auth.enabledtrue nacos.core.auth.system.typenacos nacos.core.auth.plugin.nacos.token.secret.keyYourSecretKeyHere5.2 用户管理通过API或控制台添加用户curl -X POST http://localhost:8848/nacos/v1/auth/users?usernameadminpasswordadmin6. 服务注册与发现6.1 Spring Boot应用配置spring.cloud.nacos.discovery.server-addr127.0.0.1:8848 spring.cloud.nacos.discovery.namespacedev spring.cloud.nacos.discovery.groupDEFAULT_GROUP6.2 配置中心使用spring.cloud.nacos.config.server-addr127.0.0.1:8848 spring.cloud.nacos.config.namespacedev spring.cloud.nacos.config.groupDEFAULT_GROUP spring.cloud.nacos.config.file-extensionyaml7. 运维管理7.1 健康检查curl http://localhost:8848/nacos/v1/ns/operator/health7.2 监控指标Nacos暴露的Prometheus指标端点http://localhost:8848/nacos/actuator/prometheus8. 常见问题解决8.1 数据库连接问题错误现象No DataSource set解决方案检查MySQL服务是否正常运行验证数据库连接参数是否正确确认nacos数据库已初始化8.2 认证失败问题错误现象user not found解决方案确认NACOS_AUTH_ENABLEtrue检查用户名密码是否正确验证token.secret.key配置是否一致8.3 集群节点通信问题错误现象Fail to connect node解决方案检查各节点NACOS_SERVERS配置验证网络连通性检查9848/9849端口是否开放9. 性能优化建议9.1 JVM参数调整JAVA_OPT${JAVA_OPT} -Xms2g -Xmx2g -Xmn1g JAVA_OPT${JAVA_OPT} -XX:MetaspaceSize128m -XX:MaxMetaspaceSize320m9.2 MySQL优化为config_info表添加合适索引调整InnoDB缓冲池大小定期清理历史版本数据10. 版本升级策略10.1 1.x到2.x升级备份数据库逐步替换节点验证服务兼容性10.2 补丁版本升级docker pull nacos/nacos-server:2.2.3 docker-compose down docker-compose up -d通过以上步骤您可以快速搭建一个高可用的Nacos服务注册与配置中心。实际部署时请根据业务需求调整资源配置和安全策略。