Docker部署Nacos(配置文件映射)
1、拉取镜像
docker pull nacos/nacos-server
PS:这是拉取最新的nacos版本,若是要拉取指定版本,则可以在后面加上版本号(如:docker pull nacos/nacos-server:v2.3.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=authKey
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