Docker 安装 Nacos

启动命令

开启鉴权的单机启动

docker run -d \
  --name nacos \
  --restart always \
  -e PREFER_HOST_MODE=hostname \
  -e MODE=standalone \
  -e SPRING_DATASOURCE_PLATFORM=mysql \
  -e MYSQL_SERVICE_HOST=127.0.0.1 \
  -e MYSQL_SERVICE_DB_NAME=nacos \
  -e MYSQL_SERVICE_PORT=3306 \
  -e MYSQL_SERVICE_USER=root \
  -e MYSQL_SERVICE_PASSWORD=root \
  -e JAVA_OPTS="-Xms512m -Xmx1g" \
  -e NACOS_AUTH_ENABLE=true \
  -e NACOS_CORE_AUTH_SERVER_IDENTITY_KEY="MyNacos" \
  -e NACOS_CORE_AUTH_SERVER_IDENTITY_VALUE="PnZPaCHMykI98sLspFmSbA==" \
  -e NACOS_CORE_AUTH_PLUGIN_NACOS_TOKEN_SECRET_KEY="64xidmwfFmX6msJfaicwxEwwVoVZa0pKiTnUrUxhpqQ=" \
  -m 1g \
  -p 8848:8848 \
  -p 9848:9848 \
  -p 9849:9849 \
  nacos/nacos-server:v2.4.3

环境变量说明

NACOS_CORE_AUTH_SERVER_IDENTITY_KEY 和 NACOS_CORE_AUTH_SERVER_IDENTITY_VALUE

这两个环境变量用于定义服务之间通信的鉴权标识
可以使用随机字符串生成工具生成 16-32 个字符的随机值。

使用 Linux 命令生成随机字符串:

openssl rand -base64 16

NACOS_CORE_AUTH_PLUGIN_NACOS_TOKEN_SECRET_KEY

这个值用于 JWT 的密钥,决定了 Token 的加密与解密规则,安全性要求更高。

使用随机生成工具生成 32-64 个字符长度的字符串,然后进行 Base64 编码。

openssl rand -base64 32

比如

$ openssl rand -base64 16
PnZPaCHMykI98sLspFmSbA==
$ openssl rand -base64 32
64xidmwfFmX6msJfaicwxEwwVoVZa0pKiTnUrUxhpqQ=
$

使用文件中环境变量启动

使用 Docker 的 env-file 功能,将环境变量存储在单独的文件中(如 .env 文件),然后通过 --env-file 参数加载。
示例 .env 文件:

PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=127.0.0.1
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=root
JAVA_OPTS=-Xms512m -Xmx1g
NACOS_AUTH_ENABLE=true
NACOS_CORE_AUTH_SERVER_IDENTITY_KEY=MyNacos
NACOS_CORE_AUTH_SERVER_IDENTITY_VALUE=PnZPaCHMykI98sLspFmSbA==
NACOS_CORE_AUTH_PLUGIN_NACOS_TOKEN_SECRET_KEY=64xidmwfFmX6msJfaicwxEwwVoVZa0pKiTnUrUxhpqQ=

修改后的启动命令:

docker run -d \
  --name nacos \
  --restart always \
  --env-file .env \
  -m 1g \
  -p 8848:8848 \
  -p 9848:9848 \
  -p 9849:9849 \
  nacos/nacos-server:v2.4.3

建议

根据 Nacos 文档:

  • 8848:Nacos 控制台和manual
  • 9848:gRPC 端口(用于客户端通信)
  • 9849:Raft 协议端口(用于集群同步)

如果是单机模式(MODE=standalone),9849 端口可能不需要暴露,建议移除 -p 9849:9849

资源限制简单说明

Docker 的资源限制用于控制容器对宿主机资源的占用,确保系统稳定性。以下是针对你的 Nacos 启动命令中资源限制的简要说明:

  1. 内存限制 (-m)

    • 命令中的 -m 1g 表示容器最大可用内存为 1GB。
    • 作用:防止 Nacos 容器占用过多内存,影响宿主机或其他容器。
    • 建议:根据 Nacos 的实际负载调整,如单机模式可设为 512m2g。确保 JAVA_OPTS 中的 -Xms-Xmx(如 -Xms512m -Xmx1g)与 -m 匹配,避免内存分配冲突。
  2. CPU 限制 (--cpus)

    • 你的命令未设置 CPU 限制,建议添加 --cpus="0.5",表示容器最多使用 0.5 个 CPU 核心。
    • 作用:限制 Nacos 的 CPU 使用量,避免高负载时影响宿主机性能。
    • 建议:根据宿主机 CPU 核心数和 Nacos 负载调整,如 0.51.0
  3. 改进示例

    docker run -d \
      --name nacos \
      --restart always \
      --env-file .env \
      -m 1g \
      --cpus="0.5" \
      -p 8848:8848 \
      -p 9848:9848 \
      nacos/nacos-server:v2.4.3
    
  4. 注意事项

    • 内存与 JVM 参数一致:确保 -m 值不低于 JAVA_OPTS 中的 -Xmx,否则可能导致容器崩溃。
    • 动态调整:根据实际运行情况,使用 docker stats 监控容器资源使用,优化限制值。
    • 生产环境:结合 Docker Compose 或 Kubernetes 的资源管理(如 limitsrequests),实现更精细的控制。
posted @ 2025-06-06 17:28  ioufev  阅读(158)  评论(0)    收藏  举报