在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署

1、创建network che-net02,

docker network create --subnet=172.21.0.0/24 che-net02

在这里插入图片描述

2、安装mysql(创建volume che-v5,)

docker volume create che-v5

在这里插入图片描述
创建mysql实例che-mysql,使用che-v5 volume,che-net02网络,ip为172.21.0.6,mysql:5.7镜像,端口为6607

docker run -d --name che-mysql -v che-v5:/var/lib/mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --net=che-net02 --ip 172.21.0.6 --privileged mysql:5.7

在这里插入图片描述
进入到che-mysql实例中,
在这里插入图片描述
使用mysql客户端工具连接che-mysql数据库实例
在这里插入图片描述
创建数据库testDB,并创建数据表t_user,并添加数据如下图

# 表结构
CREATE TABLE `t_user` (
  `id` int(11) NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `number` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 数据
insert into t_user (id,username,password,number) values (1,'tom','123456','0001');
insert into t_user (id,username,password,number) values (2,'james','123456','0002');
insert into t_user (id,username,password,number) values (3,'张三','123456','0003');

在这里插入图片描述

3、创建一个springboot+mysql工程,并将工程打成jar包,做成docker image镜像

创建springboot+mysql工程,参考idea+Spring Boot之springboot+mysql+mybatis搭建
工程中的application.yml文件如下:

spring:
  datasource:
    url: jdbc:mysql://my-mysql:3306/testDB?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/*.xml

打成jar后,最好在本地使用jar -jar xxx.jar运行测试一下(如下图)。
在这里插入图片描述
在这里插入图片描述
如何做成docker image镜像,请参考本人使用Docker创建一个springboot项目的镜像,并在容器中部署
我创建的springboot+mysql工程docker image镜像为docker-demo2-image,如下图
在这里插入图片描述
使用docker-demo2-image创建多个项目容器(使用network che-net02)

docker run -d --name docker-demo-1 -p 9001:8080 --net=che-net02 --ip 172.21.0.11 docker-demo2-image
docker run -d --name docker-demo-2 -p 9002:8080 --net=che-net02 --ip 172.21.0.12 docker-demo2-image
docker run -d --name docker-demo-3 -p 9003:8080 --net=che-net02 --ip 172.21.0.13 docker-demo2-image

在这里插入图片描述
然后在浏览器中分别访问http://192.168.1.9:9001/user/listall,http://192.168.1.9:9002/user/listall,http://192.168.1.9:9003/user/listall (此处大家需要理解一下ip和端口为什么如此)
在这里插入图片描述

4、创建nginx

在宿主机/tmp目录下创建nginx.conf文件,文件内容如下(此处同样要用心去理解、去想为做么配的三个server的ip和端口是这样的)(另外,我们可以将nginx.conf文件在windows系统创建好,上传到centos系统的/tmp目录下,我就是这样做的):

user nginx;
worker_processes 1;
events {
  worker_connections 1024;
}
http {
  include /etc/nginx/mime.types;
  default_type application/octet-stream;
  sendfile on;
  keepalive_timeout 65;
  server {
    listen 80;
    location / {
      proxy_pass http://balance;
    }
  }
  upstream balance{
    server 172.21.0.11:8080;
    server 172.21.0.12:9002;
    server 172.21.0.13:9003;
  }
  include /etc/nginx/conf.d/*.conf;
}

拉取nginx镜像


在这里插入图片描述
创建nginx容器che-nginx,使用network che-net02,ip设置为172.21.0.10,端口设为80,并且使用/tmp/nginx.conf配置文件

docker run -d --name che-nginx -p 80:80 -v /tmp/nginx.conf:/etc/nginx/nginx.conf --network=che-net02 --ip 172.21.0.10 nginx

在这里插入图片描述
在浏览器中输入http://192.168.1.9/user/listall
在这里插入图片描述

5、小结

我们首先先创建了一个network che-net02,che-net02的网段为172.21.0.0,然后创建mysql和springboot+mysql镜像的三个实例、nginx,都用了che-net02这个网段,保证了各个容器之间的通信畅通。而且我们还可以修改springboot+mysql镜像的数据库连接配制文件中的数据库ip改为数据库容器实例名称che-mysql,在此就不截图了,大家有兴趣可以自已试一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值