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

£神魔★判官ぃ 2022-12-02 04:24 599阅读 0赞

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 下载官方指定的集群包
      1. 启动nacos集群
      1. 验证是否成功

一、文章结构简述

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

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

二、我的Naocs集群

1 docker设置共享文件

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

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

20200829225124923.png_pic_center

1.2 设置docker共享文件路径

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center

2 pull所需镜像

  1. 命令:
  2. Mysql拉取:
  3. docker pull mysql
  4. Naocs拉取:
  5. docker pull nacos/nacos-server
  6. Nginx拉取:
  7. docker pull nginx

验证是否已经pull到本地:

2020083010012926.png_pic_center

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center 1
简要说明:

  1. /* * 默认创建的是bridge网络 * 111.111.111.0/24最后的24, * 代表网段前24位相同,后8位不同, * 即该网段范围为:111.111.111.1~111.111.111.254 */
  2. docker network create --subnet 111.111.111.0/24 anet
  3. // 检查自定义的anet是否成功
  4. docker network ls

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

4 配置Mysql

4.1 创建Mysql容器

  1. # --net anet 指定采用自定义网络anet
  2. # --network-alias mysql_main 指定网络范围别名,**备后续配置nacos数据库使用**
  3. # MYSQL_ROOT_PASSWORD=root 指定mysql登录密码,必须添加,否则无法启动容器
  4. 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. 1. 鼠标点击选中文档中的内容
  3. 2. Ctrl + C, 全部复制
  4. 3. 在本地创建一个sql文件,Ctrl + V 粘贴文本
  5. 4. 保存文件,文件后缀为.sql

2020083011084238.png_pic_center
方法一: 通过第三方链接sql库工具 Navicat链接mysql容器,并导入sql文件,运行即可

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center 2
创建数据库:

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

在这里插入图片描述
导入保存的mysql文件:

在这里插入图片描述

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

  1. # 查看mysql的容器id, 我的是4080fca966f5
  2. docker ps
  3. # copy本地sql文件到容器内部目录, copy到home根目录下
  4. docker cp C:\Users\xxx\Desktop\nacos-sql.sql 4080fca966f5:/home
  5. # 进入mysql容器内部
  6. docker exec -it 4080fca966f5 /bin/bash
  7. # 登录mysql
  8. mysql -u root -p
  9. # 再输入mysql密码登录进去
  10. # 创建数据库命令
  11. CREATE DATABASE IF NOT EXISTS nacos_config default charset utf8 COLLATE utf8_general_ci;
  12. # 导入sql脚本
  13. use nacos_config
  14. # source后面跟sql脚本的绝对路径
  15. source /home/nacos-sql.sql
  16. # 导入成功后,查验是否成功
  17. show tables

5 配置Nacos

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

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

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

5.2 配置Nacos文件

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

配置application.properties

  1. # 配置application.properties,在文件的最后位置添加以下内容
  2. spring.datasource.platform=mysql
  3. db.num=1
  4. # mysql_main:3306是mysql容器的网络别名
  5. db.url.0=jdbc:mysql://mysql_main:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
  6. db.user=root
  7. # 启动mysql时设置的密码
  8. db.password=root

5.3 启动三台Nacos实现集群

1. 启动

  1. # 启动nacos-1
  2. 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
  3. # 启动nacos-2
  4. 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
  5. # 启动nacos-cluster-123
  6. 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. 启动参数说明

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

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

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

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center 3
至此,3台nacos集群+Mysql(主)已经配置成功,接下来,配置nginx

6 配置Nginx

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

  1. # 启动
  2. docker run -d --name nginx-test nginx
  3. # 进入容器
  4. docker exec -it nginx-test /bin/bash
  5. # 进入容器内部后,找到配置文件路径
  6. cd /etc/nginx/
  7. # 查看nginx.conf配置文件

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center 4

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center 5
copy配置文件default.conf到本地docker共享路径:

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

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

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

  1. #新增,为了演示,故不配置权重
  2. upstream cluster {
  3. server nacos-1:8848;
  4. server nacos-2:8848;
  5. server nacos-3:8848;
  6. }
  7. server {
  8. listen 80;
  9. server_name localhost;
  10. #新增,配置nginx的日志级别debug
  11. #error_log /var/log/nginx/debug.log debug;
  12. #charset koi8-r;
  13. #access_log /var/log/nginx/host.access.log main;
  14. #新增,转向集群配置
  15. location /nacos {
  16. proxy_pass http://cluster;
  17. }
  18. location / {
  19. root /usr/share/nginx/html;
  20. index index.html index.htm;
  21. }
  22. #error_page 404 /404.html;
  23. # redirect server error pages to the static page /50x.html
  24. #
  25. error_page 500 502 503 504 /50x.html;
  26. location = /50x.html {
  27. root /usr/share/nginx/html;
  28. }
  29. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  30. #
  31. #location ~ \.php$ {
  32. # proxy_pass http://127.0.0.1;
  33. #}
  34. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  35. #
  36. #location ~ \.php$ {
  37. # root html;
  38. # fastcgi_pass 127.0.0.1:9000;
  39. # fastcgi_index index.php;
  40. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  41. # include fastcgi_params;
  42. #}
  43. # deny access to .htaccess files, if Apache's document root
  44. # concurs with nginx's one
  45. #
  46. #location ~ /\.ht {
  47. # deny all;
  48. #}
  49. }

6.3 启动新的Nginx

  1. # 启动命令
  2. 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
  3. # 查看启动的nginx容器
  4. docker ps

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center 6

启动命令简要:

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

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

6.4 验证Nginx配置是否成功

Nginx容器启动成功:
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center 7
Nginx反向代理成功:
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center 8

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

三 Nacos官方Docker集群

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

1 下载官方指定的集群包

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center 9
注意:clone下的包,必须在docker设置的共享目录下! 我的在D:\Document\Docker目录下,故把clone的文件包放在此目录。

2. 启动nacos集群

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

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center 10

3. 验证是否成功

  1. 查看启动日志
    watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center 11
  2. 新打开一个cmd, 查看docker启动的容器
    watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center 12
  3. 页面访问测试
    watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1b2xvbmdkc2U_size_16_color_FFFFFF_t_70_pic_center 13

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

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

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

发表评论

表情:
评论列表 (有 0 条评论,599人围观)

还没有评论,来说两句吧...

相关阅读