Nacos集群使用docker构建和部署

使用Dockers部署Nacos集群

前置条件:

构建私有镜像

准备

创建目录

[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}
nacos.inetutils.ip-address=${NACOS_APPLICATION_IP_ADDRESS}
## 直接写死配置
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:1
    container_name: nacos
    restart: always
    environment:
      - NACOS_APPLICATION_IP_ADDRESS=10.2.1.17  # 直接指定集群server的IP
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
      - "7848:7848"
    volumes:
      - nacos_volume:/home/nacos
#    nacos 使用swarm模式部署服务的IP无法自动获取,所以直接使用compose直接部署 k8s 有个 peer-finder 解决方案,待研究
#    deploy:
#      replicas: 3
volumes:
  nacos_volume:

构建

# 在 swarm 集群主节点上执行以下命令
# 进入目录
cd  /app/nacos/
# 构建镜像
docker build -t 10.2.1.14:8082/nacos.2.3.0:1 -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:1

启动

## 进入各个节点 创建目录 添加 nacos.yml 的内容 记得修改环境变量中 NACOS_APPLICATION_IP_ADDRESS 参数的值 
mkdir -p /app/nacos && vi nacos.yml 
# 通过docker-compose 启动服务 
docker-compose -f nacos.yml up -d
# 查看服务 
docker ps 

问题

  • 启动过程报错

    1. 检查数据库配置是否正确,并且正常连接
  • 无法拉取镜像

    1. 检查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"]}
      
    2. 检查私有仓库的镜像是否是最新

  • 启动后无法访问

  • 集群节点IP注册不对

    nacos.inetutils.ip-address=${NACOS_APPLICATION_IP_ADDRESS}
    
posted @ 2024-02-26 21:19  菜阿  阅读(202)  评论(0编辑  收藏  举报