首页 > 其他分享 >使用 docker-compose 部署 nacos(单机和集群)

使用 docker-compose 部署 nacos(单机和集群)

时间:2024-02-12 23:24:32浏览次数:37  
标签:compose SERVICE nacos 8848 MYSQL docker

之前已经编写过有关 nacos 的单机部署和集群部署,是直接在 CentOS7 上直接部署的,之前的博客链接如下:

单机版 nacos 部署:https://www.cnblogs.com/studyjobs/p/17380184.html

集群版 nacos 部署:https://www.cnblogs.com/studyjobs/p/17383397.html

为了进一步简化部署,本篇博客介绍如何采用 docker-compose 进行部署,与之前博客重复的细节,这里就不再赘述。

我的 CentOS7 虚拟机 ip 地址是 192.168.136.128,已经安装好了 docker 和 docker-compose


一、单机版部署

nacos 默认使用自带的 derby 数据库(类似于 sqlite 的文件型数据库),在开发环境部署单机版 nacos ,可以直接使用。

在虚拟机上创建 /app/nacos-single1 目录,里面放置一个 logs 目录和 docker-compose.yml

编写 docker-compose.yml 文件内容如下:

version: '3.5'
services:
  nacos:
    image: nacos/nacos-server:v2.2.2
    container_name: nacos
    restart: always
    ports:
      # web 界面访问端口
      - 8848:8848
      # 程序使用 grpc 连接的端口
      - 9848:9848
    environment:
      - MODE=standalone
    volumes:
      - /app/nacos-single1/logs:/home/nacos/logs

然后运行 docker-compose up -d 命令启动服务,访问 http://192.168.136.128:8848/nacos 即可

下面列出使用 mysql 数据库的 docker-compose.yml 内容,我的虚拟机上已经安装过了 mysql。首先需要在 mysql 中随便创建一个数据库(比如数据库名叫做 nacos),然后运行 nacos 提供的 sql 脚本初始化数据库,具体细节可参考上面贴出来的之前博客内容。

在虚拟机上创建 /app/nacos-single2 目录,里面放置一个 logs 目录和 docker-compose.yml

编写 docker-compose.yml 文件内容如下:

version: '3.5'
services:
  nacos:
    image: nacos/nacos-server:v2.2.2
    container_name: nacos
    restart: always
    ports:
      # web 界面访问端口
      - 8848:8848
      # 程序使用 grpc 连接的端口
      - 9848:9848
    environment:
      - MODE=standalone
      # 使用 mysql 作为数据库
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=192.168.136.128
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=root
      # 设置连接 mysql 的连接参数
      - MYSQL_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai"
    volumes:
      - /app/nacos-single2/logs:/home/nacos/logs

然后运行 docker-compose up -d 命令启动服务,访问 http://192.168.136.128:8848/nacos 即可


二、集群版部署

集群版部署主要满足以下几个条件即可:(注意:nacos 集群至少需要 3 个节点)

  • 必须使用 mysql 数据库,每个节点需要连接同一个 mysql 数据库
  • 每个节点都需要把所有节点的访问 ip 和端口配置上
  • 如果启用了用户名和密码验证,则必须每个节点的安全配置内容一致

在虚拟机上创建 /app/nacos-cluster 目录,里面放置 3 个 logs 目录、nginx.conf、docker-compose.yml

编写 docker-compose.yml 文件内容如下:

version: '3.5'
services:
  nacos1:
    image: nacos/nacos-server:v2.2.2
    container_name: nacos1
    hostname: nacos1
    restart: always
    ports:
      # web 界面访问端口
      - 8841:8848
      # 程序使用 grpc 连接的端口
      - 9841:9848
    environment:
      - MODE=cluster
      - PREFER_HOST_MODE=hostname
      - NACOS_SERVERS=nacos1:8848,nacos2:8848,nacos3:8848
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=192.168.136.128
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=root
      - MYSQL_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai"
    volumes:
      - /app/nacos-cluster/logs1:/home/nacos/logs
    networks:
      - nacos_net

  nacos2:
    image: nacos/nacos-server:v2.2.2
    container_name: nacos2
    hostname: nacos2
    restart: always
    ports:
      # web 界面访问端口
      - 8842:8848
      # 程序使用 grpc 连接的端口
      - 9842:9848
    environment:
      - MODE=cluster
      - PREFER_HOST_MODE=hostname
      - NACOS_SERVERS=nacos1:8848,nacos2:8848,nacos3:8848
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=192.168.136.128
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=root
      - MYSQL_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai"
    volumes:
      - /app/nacos-cluster/logs3:/home/nacos/logs
    networks:
      - nacos_net

  nacos3:
    image: nacos/nacos-server:v2.2.2
    container_name: nacos3
    hostname: nacos3
    restart: always
    ports:
      # web 界面访问端口
      - 8843:8848
      # 程序使用 grpc 连接的端口
      - 9843:9848
    environment:
      - MODE=cluster
      - PREFER_HOST_MODE=hostname
      - NACOS_SERVERS=nacos1:8848,nacos2:8848,nacos3:8848
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=192.168.136.128
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=root
      - MYSQL_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai"
    volumes:
      - /app/nacos-cluster/logs3:/home/nacos/logs
    networks:
      - nacos_net

  nginx:
    image: nginx
    container_name: nginx
    privileged: true
    restart: always
    volumes:
      - /app/nacos-cluster/nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 80:80
      - 1080:1080
    networks:
      - nacos_net
    depends_on:
      - nacos1
      - nacos2
      - nacos3

# 网络配置
networks:
  nacos_net:
    driver: bridge

下面列出 nginx 的配置文件内容,由于 nginx 跟 3 个 nacos 节点在相同的网络 nacos_net,因此可以直接通过服务名称访问 3 个 nacos 节点,并直接对 3 个容器内部的 8848 和 9848 端口进行转发,其中 8848 采用 http 转发,9848 采用 tcp 转发,nginx 在 1.19 版本开始支持 tcp 的转发。

worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

# 配置 http 服务
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    upstream nacos-cluster {
        server nacos1:8848;
        server nacos2:8848;
        server nacos3:8848;
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://nacos-cluster;
        }
    }
}

# 配置 tcp 服务
stream {
    upstream grpc-cluster {
        server nacos1:9848;
        server nacos2:9848;
        server nacos3:9848;
    }

    server {
        listen     1080;
        proxy_pass grpc-cluster;
    }
}

然后运行 docker-compose up -d 命令启动服务,由于我们既把每个节点的端口都映射出来,也采用 nginx 对容器内部的端口进行了转发,因此以下 4 个地址都可以访问 nacos 网站:

  • nginx 转发统一后的地址:http://192.168.136.128/nacos
  • nacos1 的访问地址:http://192.168.136.128:8841/nacos
  • nacos2 的访问地址:http://192.168.136.128:8842/nacos
  • nacos3 的访问地址:http://192.168.136.128:8843/nacos

三、启用账号密码访问

默认情况下,nacos 不需要用户名和密码验证,以上部署后的成果,直接访问就会进入 nacos 配置界面中。

对于 nacos 来说,一般情况下都是在内网使用,所以可以不启用账号密码验证。

如果想要启动账号密码访问,只需要在上面的 docker-compose.yml 中的 environment 下面增加以下环境变量配置即可:

# 设置以下环境变量时,启用账号密码登录(默认的账号和密码都是 nacos)
environment:
  # 启用账号密码验证
  - NACOS_AUTH_ENABLE=true
  # 随便使用一个32个字符组成的字符串,生成 base64 字符串,填写到这里即可
  - NACOS_AUTH_TOKEN=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
  # 随便填写
  - NACOS_AUTH_IDENTITY_KEY=JobsKey
  # 随便填写
  - NACOS_AUTH_IDENTITY_VALUE=JobsValue

对于 nacos 集群来说,以上环境变量的配置内容必须保持一致。


OK,以上就是采用 docker-compose 部署单机 nacos 和 集群 nacos 的全部内容,有关 java 的连接操作,可以参考我之前发布的博客。

标签:compose,SERVICE,nacos,8848,MYSQL,docker
From: https://www.cnblogs.com/studyjobs/p/18014237

相关文章

  • Dubbo + Nacos这么玩就失去高可用的能力了
    酱香配拿铁喝了伤头,Dubbo配Nacos这么玩也会伤头。本文介绍Dubbo配合Nacos搭建的微服务系统,在Nacos-Server集群重启时出现的问题。过程中通过种种现象、猜测、翻看源码、实践,最终让Nacos-Server平滑重启。我们常用的微服务框架是SpringCloud那一套,在服务远程调用和注册中心的选......
  • Docker小知识备忘录
    本文整理了一些Docker基础知识和常用命令,方便朋友们查阅。同时也感谢Docker这个划时代的产品,它解决了环境一致性的问题,让交付和迁移更轻松。1、Docker与虚拟化1.1、虚拟化技术虚拟化技术分为两大类,全虚拟化和半虚拟化。全虚拟化比如之前我们使用的虚拟机就是全虚拟化,这种......
  • Docker入门学习
    Docker学习笔记目录Docker学习笔记1.快速入门1.1部署MySQL1.2命令解读2.Docker基础2.1常见命令2.2数据卷2.2.1什么是数据卷?2.2.2挂载本地目录或文件(推荐)2.3自定义镜像2.3.1镜像的结构2.3.2Dockerfile2.3.3构建镜像2.4网络3.项目部署3.1手动部署3.1.1部署后端项目3.1.2部署前端项......
  • Mac电脑安装RedisCluster集群(非Docker模式)
    第1步,新建redis.confredis.conf内容如下:port7021cluster-enabledyes              //启用集群模式cluster-config-filenodes.conf     //集群的配置文件cluster-node-timeout5000appendonlyyesdaemonizeyesbind0.0.0.0   ......
  • Docker的错误和解决_2
    windows11下启动docker运行镜像ok,  但是浏览器访问时80端口的访问失败  其他端口ok,可能是我本地iis占了 ......
  • Asp-Net-Core学习笔记:部署,早知道,还是docker,以及一点碎碎念
    前言AspNetCore技术栈在我们团队里的使用也有一段时间了,之前的部署方式一直是本地编译之后上传可执行文件到服务器,使用supervisor来管理进程这种很原始的方式。参考之前的文章:对于小项目来说尚可,够用,但是存在几个问题:每次更新花费的时间太长了,无论是Framework-Dependent还是S......
  • docker学习的时候敲的历史命令。两百多条
    sudoaptlist|grep-idockercurlhttps://registry-1.docker.io/v2/sudodockerstatussudodockerstatssudodockerpssudodockerps-asudodockerstartebb9831a05fdsudodockerpssudodockerstopebb9831a05fdsudodockerps-asudodockerrun-d......
  • Docker的资源限制
    前言本文主要会介绍笔者在学习Docker的资源限制实现原理时所总结的知识点,其中会涉及到对于CPU资源限制、内存资源限制以及磁盘I/O资源限制等方面的相关内容。笔者也会将自己的理解在文中进行阐述,这也算是在和大家交流心得的一个过程。若文中有错误的理解和概念,请大家及时纠正;吸纳......
  • docker---dockerfile自定义镜像指令
    dockerfile指令FROM#指定所基于的镜像名称及其标签来创建新镜像。RUN#在镜像中执行命令。ADD#将文件或目录复制到镜像中。可以使用URL作为源文件。COPY#与ADD类似,将文件或目录复制到镜像中,但不支持URL作为源文件。CMD#指定运行容器时要执行的命令,如果在......
  • docker的优势和劣势
    优势:1.轻量级快速:Docker利用容器技术,相比传统虚拟化技术更加轻量级,启动速度快,资源消耗低,使得应用可以更快地部署和运行。2.跨平台:Docker支持跨平台运行,可以在不同的操作系统上运行,例如Linux、Windows和macOS等,为开发和部署提供了更大的灵活性。3.隔离性:Docker容器提......