docker搭建nacos集群 实现nginx反向代理

Docker平台实现nacos集群部署及Nginx反向代理

提示:
系统测试平台:Win10系统
▲ 默认docker已经安装成功
版本说明:
Docker版本:19.03.12
Nacos版本: 1.3.2
Mysql版本:8.0.21
Nginx版本:1.19.2


文章目录

  • Docker平台实现nacos集群部署及Nginx反向代理
  • 一、文章结构简述
  • 二、我的Naocs集群
    • 1 docker设置共享文件
      • 1.1 本地主机创建共享文件夹
      • 1.2 设置docker共享文件路径
    • 2 pull所需镜像
    • 3 自定义network, 后续在运行容器的时使用
    • 4 配置Mysql
      • 4.1 创建Mysql容器
      • 4.2 创建Nacos数据库
    • 5 配置Nacos
      • 5.1 运行一个示例容器,拷贝配置文件
      • 5.2 配置Nacos文件
      • 5.3 启动三台Nacos实现集群
    • 6 配置Nginx
      • 6.1 运行一个示例容器,拷贝配置文件
      • 6.2 配置集群,实现反向代理
      • 6.3 启动新的Nginx
      • 6.4 验证Nginx配置是否成功
  • 三 Nacos官方Docker集群
    • 1 下载官方指定的集群包
    • 2. 启动nacos集群
    • 3. 验证是否成功

一、文章结构简述

  1. 自己搭建的Naocs集群操作(Nginx(1台) + Nacos(3台) + Mysql(1台)), 所用的组件版本,详见上方的版本说明
  2. Nacos官方说明的搭建方式操作(Naocs(3台) + Mysql(2台,主从)),版本为官方文档中写明的版本

先说自己搭建的,再讲官方的,其中的曲折会如实记录,配置文件会详细贴出!

二、我的Naocs集群

1 docker设置共享文件

为了配置集群的方便性,已经后续官网配置的可行性,此设置务必配置,否则后续Nacos官网配置的文件无法运行!

1.1 本地主机创建共享文件夹

1.2 设置docker共享文件路径

docker搭建nacos集群 实现nginx反向代理_第1张图片

2 pull所需镜像

命令:
   Mysql拉取:
     docker pull mysql
   Naocs拉取:
     docker pull nacos/nacos-server
   Nginx拉取:
     docker pull nginx

验证是否已经pull到本地:

docker搭建nacos集群 实现nginx反向代理_第2张图片

3 自定义network, 后续在运行容器的时使用

docker搭建nacos集群 实现nginx反向代理_第3张图片
简要说明:

/*
* 默认创建的是bridge网络
* 111.111.111.0/24最后的24,
* 代表网段前24位相同,后8位不同, 
* 即该网段范围为:111.111.111.1~111.111.111.254
*/
docker network create --subnet 111.111.111.0/24 anet 

// 检查自定义的anet是否成功
docker network ls

后续用到的是此网段运行容器,也可以选择docker默认的网段运行容器。

4 配置Mysql

4.1 创建Mysql容器

# --net anet 指定采用自定义网络anet
# --network-alias mysql_main 指定网络范围别名,**备后续配置nacos数据库使用**
# MYSQL_ROOT_PASSWORD=root 指定mysql登录密码,必须添加,否则无法启动容器
docker run -d -p 3306:3306 --network anet --network-alias mysql_main -e MYSQL_ROOT_PASSWORD=root --name mysql_main mysql:latest

验证是否启动成功:

在这里插入图片描述

4.2 创建Nacos数据库

Nacos官方数据源sql链接

操作步骤:
  1. 鼠标点击选中文档中的内容
  2. Ctrl + C, 全部复制
  3. 在本地创建一个sql文件,Ctrl + V 粘贴文本
  4. 保存文件,文件后缀为.sql

docker搭建nacos集群 实现nginx反向代理_第4张图片
方法一: 通过第三方链接sql库工具 Navicat链接mysql容器,并导入sql文件,运行即可

docker搭建nacos集群 实现nginx反向代理_第5张图片
创建数据库:

注意,字符集必须时utf8,因为nacos目前只认utf8字符集,utf8mb4也不行

docker搭建nacos集群 实现nginx反向代理_第6张图片
导入保存的mysql文件:

方法二: 进入mysql容器,copy本地sql文件到容器内部,运行

# 查看mysql的容器id, 我的是4080fca966f5
docker ps
# copy本地sql文件到容器内部目录, copy到home根目录下
docker cp C:\Users\xxx\Desktop\nacos-sql.sql 4080fca966f5:/home
# 进入mysql容器内部
docker exec -it 4080fca966f5 /bin/bash 

# 登录mysql
mysql -u root -p
# 再输入mysql密码登录进去

# 创建数据库命令
CREATE DATABASE IF NOT EXISTS nacos_config default charset utf8 COLLATE utf8_general_ci;
# 导入sql脚本
use nacos_config
# source后面跟sql脚本的绝对路径
source /home/nacos-sql.sql
# 导入成功后,查验是否成功
show tables

5 配置Nacos

5.1 运行一个示例容器,拷贝配置文件

# 运行命令
docker run -d --name nacos-test nacos/nacos-server:latest
# 查看运行的容器ID, 我的是 5c0a4eb39a94 
docker ps 
# copy配置文件到本地共享目录下,供后续映射本地卷使用
docker cp 5c0a4eb39a94:/home/nacos/conf/application.properties D:\Document\Docker\nacos\conf

注意: 本地卷目录地址,必须是先前配置的docker共享目录,否则运行容器时,无法成功完成映射,谨记!!

5.2 配置Nacos文件

打开copy的配置文件,编辑配置

配置application.properties

# 配置application.properties,在文件的最后位置添加以下内容
spring.datasource.platform=mysql

db.num=1
# mysql_main:3306是mysql容器的网络别名
db.url.0=jdbc:mysql://mysql_main:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
# 启动mysql时设置的密码
db.password=root

5.3 启动三台Nacos实现集群

1. 启动

# 启动nacos-1
docker run -d -p 8847:8848 --network anet --network-alias nacos-1 --name nacos-1 -e TZ="Asia/Shanghai" -e PREFER_HOST_MODE="hostname" -e MODE=cluster -e NACOS_SERVERS="nacos-1:8848 nacos-2:8848 nacos-3:8848" -v D:\Document\Docker\nacos\conf\application.properties:/home/nacos/conf/application.properties nacos/nacos-server:latest
# 启动nacos-2
docker run -d -p 8848:8848 --network anet --network-alias nacos-2 --name nacos-2 -e TZ="Asia/Shanghai" -e PREFER_HOST_MODE="hostname" -e MODE=cluster -e NACOS_SERVERS="nacos-1:8848 nacos-2:8848 nacos-3:8848" -v D:\Document\Docker\nacos\conf\application.properties:/home/nacos/conf/application.properties nacos/nacos-server:latest
# 启动nacos-cluster-123
docker run -d -p 8849:8848 --network anet --network-alias nacos-3 --name nacos-3 -e TZ="Asia/Shanghai" -e PREFER_HOST_MODE="hostname" -e MODE=cluster -e NACOS_SERVERS="nacos-1:8848 nacos-2:8848 nacos-3:8848" -v D:\Document\Docker\nacos\conf\application.properties:/home/nacos/conf/application.properties nacos/nacos-server:latest

3. 启动参数说明

docker run -d \ # 后台运行容器
-p 8847:8848 \ # 主机8847端口映射容器8848端口
--network anet \ # 采用自定义的网络 anet
--network-alias nacos-1 \ # 设置网络别名 nacos-1
--name nacos-1 \ # 容器名称 nacos-1
-e TZ="Asia/Shanghai" \ # 时区环境变量 上海
-e PREFER_HOST_MODE="hostname" \ #首选主机模式
-e MODE=cluster \ # 设置集群模式
-e NACOS_SERVERS="nacos-1:8848 nacos-2:8848 nacos-3:8848" \ # nacos集群地址
-v D:\Document\Docker\nacos\conf\application.properties:/home/nacos/conf/application.properties \ # 本地配置文件映射到nacos配置文件
nacos/nacos-server:latest # 启动的nacos镜像

application.properties配置文件的映射,主要目的是映射我们创建的mysq容器

2. 验证:
因为我们配置的Nacos依赖的数据库是自定义的Mysql容器,所以我们应该先启动Mysql容器,再启动Nacos容器

Nacos默认登录名:naocs, 密码:nacos
此时登录进去之后,发现另外两台nacos容器已经注入:

docker搭建nacos集群 实现nginx反向代理_第7张图片
至此,3台nacos集群+Mysql(主)已经配置成功,接下来,配置nginx

6 配置Nginx

6.1 运行一个示例容器,拷贝配置文件

# 启动
docker run -d --name nginx-test nginx 
# 进入容器
docker exec -it nginx-test /bin/bash 

# 进入容器内部后,找到配置文件路径
cd /etc/nginx/
# 查看nginx.conf配置文件

docker搭建nacos集群 实现nginx反向代理_第8张图片

docker搭建nacos集群 实现nginx反向代理_第9张图片
copy配置文件default.conf到本地docker共享路径:

# copy配置文件default.conf到本地路径下
docker cp 704d92e2e528:/etc/nginx/conf.d/default.conf  D:\Document\Docker\nginx 
# 也可以copy前端html到本地,此映射可有可无
docker cp 704d92e2e528:/usr/share/nginx/html  D:\Document\Docker\nginx\html

6.2 配置集群,实现反向代理

打开我们copy到本地的default.conf文件,编辑并保存:
注意:标有 "#新增" 的说明是在原有的配置文件中新添加的内容。注意添加内容的位置。

#新增,为了演示,故不配置权重
upstream cluster {
     
	server nacos-1:8848;
	server nacos-2:8848;
	server nacos-3:8848;
}

server {
     
    listen       80;
    server_name  localhost;
	#新增,配置nginx的日志级别debug
	#error_log /var/log/nginx/debug.log debug;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    #新增,转向集群配置
	location /nacos {
     
        proxy_pass http://cluster;
    }

    location / {
     
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
     
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
     
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
     
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
     
    #    deny  all;
    #}
}

6.3 启动新的Nginx

# 启动命令
docker run -d -p 80:80 --name nginx --network anet -v D:\Document\Docker\nginx\html:/usr/share/nginx/html -v D:\Document\Docker\nginx\log:/var/log/nginx -v D:\Document\Docker\nginx\default.conf:/etc/nginx/conf.d/default.conf nginx:latest
# 查看启动的nginx容器
docker ps 

启动命令简要:

docker run -d \
-p 80:80 \ # 主机80端口映射容器80端口
--name nginx \ # 容器名称nginx
--network anet \ # 指定网络,anet
-v D:\Document\Docker\nginx\html:/usr/share/nginx/html \ # 映射html到主机
-v D:\Document\Docker\nginx\log:/var/log/nginx \ # 映射日志文件到主机
-v D:\Document\Docker\nginx\default.conf:/etc/nginx/conf.d/default.conf \ # 映射主机配置文件到nginx
nginx:latest 

注意: --network anet必须添加,因为我们之前启动的nacos,mysql都在此网络下,只有同一网络容器之间才能互通!

6.4 验证Nginx配置是否成功

Nginx容器启动成功:
docker搭建nacos集群 实现nginx反向代理_第10张图片
Nginx反向代理成功:
docker搭建nacos集群 实现nginx反向代理_第11张图片

至此,我的Nacos集群配置全部完成,实现 Nginx(1台) + Nacos(3台) + Mysql(1台)的配置。

三 Nacos官方Docker集群

Nacos官方集群文档地址,必读

1 下载官方指定的集群包

git clone https://github.com/nacos-group/nacos-docker.git

docker搭建nacos集群 实现nginx反向代理_第12张图片
注意:clone下的包,必须在docker设置的共享目录下! 我的在D:\Document\Docker目录下,故把clone的文件包放在此目录。

2. 启动nacos集群

因为上面我们自己启动的Nacos集群用到了3306等端口,与官方集群配置有冲突,所以需要先把我们自己搭建的集群容器全部关掉,再用官方的方式启动集群!

# 进入此文件夹,到根目录
cd nacos-docker
# 启动,等待一段时间,因为官方启动的镜像,本地如果没有需要下载
docker-compose -f example/cluster-hostname.yaml up 

docker搭建nacos集群 实现nginx反向代理_第13张图片

3. 验证是否成功

  1. 查看启动日志
    docker搭建nacos集群 实现nginx反向代理_第14张图片

  2. 新打开一个cmd, 查看docker启动的容器

  3. 页面访问测试
    docker搭建nacos集群 实现nginx反向代理_第15张图片

注意:启动Nacos集群的cmd终端不能关闭!

至此:官方集群配置已经说明完毕,相对来说是个无脑操作 (●’◡’●)

(本文完 !)
如果有涉及到本文内容,必须付此原文链接,并简要说明!

你可能感兴趣的:(docker,docker,nginx)