Docker安装nacos(配置文件映射)

发布时间 2024-01-11 10:21:58作者: 右手一个柚

1、拉取镜像

docker pull nacos/nacos-server

PS:这是拉取最新的nacos版本,若是要拉取指定版本,则可以在后面加上版本号(如:docker pull nacos/nacos-server:v2.2.0)

2、创建存储nacos数据信息的目录

在根目录下创建/data/docker/nacos目录,用于挂载存储nacos的数据信息

mkdir /data/docker/nacos -p

ps:-p 作用是在创建多级文件时,不存在某一级文件就会自动创建,存在就使用原文件

3、nacos配置文件获取&修改

3.1、提前运行一个nacos容器

目的: 把nacos容器中的配置文件拷贝到宿主机中对应的目录下。

3.2、创建nacos容器

docker  run -d  --name nacos  \
-p 8848:8848  \
-p 9848:9848  \
-p 9849:9849  \
--privileged=true  \
--restart=always  \
-v /etc/localtime:/etc/localtime:ro  \
-e TZ=Asia/Shanghai \
-e LANG=en_US.UTF-8 \
-e JVM_XMS=256m  \
-e JVM_XMX=256m  \
-e MODE=standalone  \
nacos/nacos-server:v2.3.0

3.3、拷贝容器中的数据到宿主机对应的目录下

docker cp nacos:/home/nacos/conf /data/docker/nacos/conf

3.4、停止&删除容器

docker rm -f nacos

4、修改 application.properties 配置文件

编辑配置文件

vim /data/docker/nacos/conf/application.properties

一般主要修改下面配置文件中标红部分

如果想要开启鉴权功能,可参照 https://www.cnblogs.com/shigzh/p/17954917
推荐开启如下配置

# 开启鉴权功能
nacos.core.auth.enabled=true
# 关闭使用user-agent判断服务端请求并放行鉴权的功能
nacos.core.auth.enable.userAgentAuthWhite=false
# 配置自定义身份识别的key和value,这两个属性是auth的白名单,用于标识来自其它服务器的请求。
nacos.core.auth.server.identity.key=shigzh
nacos.core.auth.server.identity.value=shigzh
# 自定义用于生成JWT令牌的密钥,注意:原始密钥长度不得低于32字符,且一定要进行Base64编码,否则无法启动节点。
nacos.core.auth.plugin.nacos.token.secret.key=bmFjb3NfMjAyNDAxMTBfc2hpZ3poX25hY29zX3Rva2Vu
# 权限缓存开关,开启后权限缓存的更新默认有15秒的延迟,默认 : false
nacos.core.auth.caching.enabled=true
# 数据库相关配置
db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST:sgz.wz}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
db.user.0=${MYSQL_SERVICE_USER:root}
db.password.0=${MYSQL_SERVICE_PASSWORD:root@12345678}

5、初始化nacos数据库

5.1、用navicat创建数据库,库名为nacos

5.2、获取数据库脚本文件

有如下3种方式进行获取

  • 通过nacos容器目录/home/nacos/conf下获取数据库脚本文件mysql-schema.sql。
  • 通过宿主机目录/data/docker/nacos/conf下获取数据库脚本文件mysql-schema.sql。
  • 直接通过 https://www.cnblogs.com/shigzh/p/17941250 获取数据库脚本文件。

5.3、执行数据库脚本文件

6、运行容器

docker  run -d  --name nacos  \
-p 8848:8848  \
-p 9848:9848  \
-p 9849:9849  \
--privileged=true  \
--restart=always  \
-v /data/docker/nacos/logs/:/home/nacos/logs \
-v /data/docker/nacos/data/:/home/nacos/data \
-v /data/docker/nacos/conf/:/home/nacos/conf \
-v /etc/localtime:/etc/localtime:ro  \
-e TZ=Asia/Shanghai \
-e LANG=en_US.UTF-8 \
-e JVM_XMS=256m  \
-e JVM_XMX=256m  \
-e MODE=standalone  \
-e PREFER_HOST_MODE=hostname \
nacos/nacos-server:v2.3.0

命令说明

  • docker run -d :启动容器, -d 表示后台启动并返回容器id
  • –name nacos:为容器指定一个名称
  • -p 8848:8848 -p 9848:9848 -p 9849:9849

①指定端口映射,注意这里的p不能大写,大写是随机端口映射。
②“:”前为宿主机端口号,“:”后为容器端口号。
③nacos客户端2.x后增加了9848、9849这两个端口来进行gRPC通信,是主端口通过一定偏移量自动生成的(即8848 + 1000 和 8848 + 1001),如果nacos对外暴露的主端口是其它(默认是8848),那么这两个端口就需要用暴露的主端口分别+1000 和 +1001进行获取并暴露。
④9848端口,是指客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求,与主端口的偏移量为1000(即8848+1000)
⑤9849端口,是指服务端gRPC请求服务端端口,用于服务间同步等,与主端口的偏移量为1001(即8848+1001)

  • –privileged=true:扩大容器内的权限,将容器内的权限变为root权限,即获取宿主机root权限,不加的话就是普通用户权限,可能会出现cannot open directory
  • -e JVM_XMS=256m:为jvm启动时分配的内存
  • -e JVM_XMX=256m:为jvm运行过程中分配的最大内存
  • -e MODE=standalone:使用standalone(单机)模式,MODE值有cluster(集群)模式/standalone(单机)模式两种,MODE必须大写
  • -v /data/docker/nacos/logs/:/home/nacos/logs

将容器内的/home/nacos/logs目录挂载到宿主机的 /data/docker/nacos/logs,用于存储nacos日志文件。

  • -v /data/docker/nacos/data/:/home/nacos/data

将容器内的/home/nacos/data目录挂载到宿主机的 /data/docker/nacos/data,用于存储nacos数据文件。

  • -v /data/docker/nacos/conf/:/home/nacos/conf

将容器内的/home/nacos/conf目录挂载到宿主机的 /data/docker/nacos/conf,用于存储nacos配置文件。

  • –restart=always:当Docker重启时,容器能自动启动
  • nacos/nacos-server:启动容器的nacos镜像
  • PREFER_HOST_MODE:nacos集群访问模式,支持IP还是域名模式,这里配置为hostname(即域名模式,按域名解析),默认为ip

7、访问nacos

http://ip地址:8848/nacos/index.html
账号密码默认都是nacos