使用Dockers部署Nacos集群
前置条件:
-
已经有Mysql服务保存Nacos配置数据
-
Docker Swarm集群已经初始化
[root@swarm nacos]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION lbrj80f4queyxowvqgoxq4e21 * swarm.manager14 Ready Active Leader 24.0.6 dglfv8gqgxqebfrjvfyqv5lju swarm.work15 Ready Active 24.0.6 ycbtvvg2vh82bjghkeqjl5rvz swarm.work16 Ready Active 24.0.6 k7k9dg4lx12g7vz1d9f59y2up swarm.work17 Ready Active 24.0.6
-
私有镜像仓库可以正常使用(可选)
构建私有镜像
准备
创建目录
[root@swarm nacos]# pwd
/app/nacos
## 目录层级和目录中文件如下
/app/nacos/
/app/nacos/nacos.Dockerfile
/app/nacos/nacos.yml
/app/nacos/asset/
/app/nacos/asset/nacos-server-2.3.0.tar.gz
/app/nacos/asset/jdk-8u144-linux-x64.tar.gz
/app/nacos/asset/bin/
/app/nacos/asset/bin/docker-startup.sh
/app/nacos/asset/conf/
/app/nacos/asset/conf/application.properties
/app/nacos/asset/conf/cluster.conf
/app/nacos/asset/conf/console-guide.conf
/app/nacos/asset/conf/nacos-logback.xml
tar.gz包
从官方网站下载 jdk-8u144-linux-x64.tar.gz nacos-server-2.3.0.tar.gz
docker-startup.sh
获取方式:解压nacos-server-*.tar.gz包后,复制里面的 bin/startup.sh ,修改最后的启动脚本,将后台启动修改为前台启动,
具体修改: nohup 修改为 exec ,最后的 & 符号去掉。
#!/bin/bash
## 此处省略内容
******************
******************
if [[ "$JAVA_OPT_EXT_FIX" == "" ]]; then
exec "$JAVA" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1
else
exec "$JAVA" "$JAVA_OPT_EXT_FIX" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1
fi
echo "nacos is starting. you can check the ${BASE_DIR}/logs/start.out"
application.properties
conf目录中的所有配置文件都是从nacos-server-*.tar.gz包里面复制来,只是按需求做了一定修改
## 动态从环境变量中获取配置来替换
server.port=${NACOS_APPLICATION_PORT:8848}
## 直接写死配置
db.num=1
db.url.0=jdbc:mysql://10.2.1.14:3336/nacos_mysql?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
修改集群配置文件
cat asset/conf/cluster.conf
#it is ip
#example
10.2.1.15:8848
10.2.1.16:8848
10.2.1.17:8848
nacos.Dockerfile
FROM centos:centos7
# 构建一个自定义的nacos镜像,需要的jdk和nacos-server自行下载
WORKDIR /home
# identity、gzip、bzip2 或 xz 这些文件会自动解压
ADD ../asset/jdk-8u144-linux-x64.tar.gz jdk
ADD ../asset/nacos-server-2.3.0.tar.gz .
# nacos-server-2.3.0.tar.gz 解压后
# 直接从解压后的配置中复制后修改
ADD ../asset/conf/* nacos/conf
# 复制 startup.sh 文件为 docker-startup.sh 修改最后的启动命令为 exec 方式,让nacos进程成为容器内的 pid=1 的进程 。
ADD ../asset/bin/* nacos/bin
ENV NACOS_HOME /home/nacos
ENV JAVA_HOME /home/jdk/jdk1.8.0_144
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH $PATH:${JAVA_HOME}/bin
# 这里使用环境变量来覆盖配置文件里面的默认配置
ENV NACOS_APPLICATION_PORT 8848
EXPOSE 8848
WORKDIR $NACOS_HOME
ENTRYPOINT ["bin/docker-startup.sh"]
# CMD [ "/bin/startup.sh" ]
nacos.yml
version: '3.8'
services:
nacos:
image: 10.2.1.14:8082/nacos:2.3.0
ports:
## 端口相关文件 https://nacos.io/zh-cn/docs/v2/guide/admin/cluster-mode-quick-start.html
- "8848:8848"
- "9848:9848"
- "9849:9849"
- "7848:7848"
volumes:
- nacos_volume:/home/nacos
networks:
- swarm_net
deploy:
replicas: 3
networks:
swarm_net:
# external: true 时 要手动创建这个网络 docker network create -d overlay swarm_net
external: true
volumes:
nacos_volume:
构建
# 在 swarm 集群主节点上执行以下命令
# 创建网络,如果没有的话
docker network create -d overlay swarm_net
# 进入目录
cd /app/nacos/
# 构建镜像
docker build -t 10.2.1.14:8082/nacos:2.3.0 -f nacos.Dockerfile .
# 推送到私有仓库
docker login 10.2.1.14:8082 -u admin -p pass
docker push 10.2.1.14:8082/nacos:2.3.0
启动
# 通过docker stack 发布启动
docker stack deploy -c nacos.yml nacos
# 查看服务
docker service ls
# 查看日志
docker service logs qv2msyp8z
问题
-
启动过程报错
- 检查数据库配置是否正确,并且正常连接
-
无法拉取镜像
-
检查docker的配置文件是否正确 /etc/docker/daemon.json
{"default-address-pools":[{"base":"10.30.0.0/16","size":24}],"insecure-registries":["10.2.1.14:8082","10.2.1.14:5000"],"registry-mirrors":["http://10.2.1.14:5000"]}
-
检查私有仓库的镜像是否是最新
-
-
启动后无法访问
-
集群节点IP注册不对