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

1、创建network che-net02,

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

在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署_第1张图片

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

docker volume create che-v5

在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署_第2张图片
创建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

在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署_第3张图片
进入到che-mysql实例中,
在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署_第4张图片
使用mysql客户端工具连接che-mysql数据库实例
在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署_第5张图片
创建数据库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');

在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署_第6张图片

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中通过nginx实现springboot+mysql项目的负载均衡集群部署_第7张图片
在这里插入图片描述
如何做成docker image镜像,请参考本人使用Docker创建一个springboot项目的镜像,并在容器中部署
我创建的springboot+mysql工程docker image镜像为docker-demo2-image,如下图
在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署_第8张图片
使用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

在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署_第9张图片
然后在浏览器中分别访问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和端口为什么如此)
在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署_第10张图片

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镜像


在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署_第11张图片
创建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

在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署_第12张图片
在浏览器中输入http://192.168.1.9/user/listall
在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署_第13张图片

5、小结

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

你可能感兴趣的:(Docker)