ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

CentOS 使用Docker 部署多台Springboot程序,并用Nginx做负载均衡

2020-05-25 16:05:25  阅读:323  来源: 互联网

标签:容器 Springboot CentOS nginx jar Nginx myapp docker springboot


 本文将讲解在CentOS中使用Docker 去部署两个Springboot程序,并用Ngix去做负载均衡

 1. Docker的安装

   安装Docker

yum install -y docker

  设置开机启动

systemctl enable docker

 启动Docker

systemctl start docker

 

 2. 制作springboot程序的Docker镜像

 

   2.1 springboot程序打包

      将需要发布的程序通过mvn package打包成一个可执行的jar,并上传到CentOS上

      alipay_demo-0.0.1-SNAPSHOT.jar

   2.2 Dockerfile文件

     在jar包所在目录,新建Dockerfile文件,内容如下

    

1 # 基础镜像使用java
2 FROM java:8
3 # VOLUME 指定了临时文件目录为/tmp
4 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
5 VOLUME /tmp
6 # 将jar包添加到容器中并更名为app.jar
7 ADD alipay_demo-0.0.1-SNAPSHOT.jar /app.jar
8 # 运行jar包
9 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

    文件结构如下:

 

  

 

   2.3 生成镜像

    进入到Dockerfile所在目录,运行如下命令

    

docker build -t myapp/springboot .

   其中  myapp/springboot 为镜像的名称

   ps: 注意命令后面有个点,表示当前目录,也可以写当前的完整路径

     

   运行后通过如下命令就可以看到我们生成的镜像

   

docker images

 

 

   

3. 启动springboot的docker容器

  我们的springboot程序启动后的端口为10086,
  下面的命令表示启动2个docker容器,并分别将容器内的10086端口映射到服务器的8080和8088端口

  

docker run -d -h myapphost -p 8080:10086 --name myapp myapp/springboot
docker run -d -h myapphost2 -p 8088:10086 --name myapp2 myapp/springboot

-d 表示后台运行
-h 容器的主机名
-p  port1:port2  port1服务器的端口 port2 容器内端口
-name 容器名称
最后一个参数为镜像名称

  

 启动后可以通过如下命令查看到正在运行的容器

  

docker ps

 

 此时可以通过服务器IP+映射出来的端口访问我们的程序,说明springboot程序已经启动成功

 

  http://192.168.0.187:8080/order/goPay

  http://192.168.0.187:8080/order/goPay

 

  

 

 

 

 4. Nginx配置

   4.1 拉取Nginx镜像

   

docker pull nginx:latest

 拉取后可以通过 docker images 查看下载的镜像

 

  

 

  4.2 在本地配置nginx配置

 

   因为docker容器里面的文件会随着容器的删除而丢失,所以我们做下配置文件的映射,让nginx从容器外的服务器上读取配置文件

    

   在服务器上新建目录 /home/docker_nginx

   在目录中新建 conf html log 目录,结构如下:

   

 

  在config目录中新建 nginx.conf 文件

  nginx.conf 中定义了负载均衡,分别向后台两个springboot程序转发,其中myapp和myapp2为应用程序的docker名称

  具体内容如下:

  

 1 user  nginx;
 2 worker_processes  1;
 3 
 4 error_log  /var/log/nginx/error.log warn;
 5 pid        /var/run/nginx.pid;
 6 
 7 
 8 events {
 9     worker_connections  1024;
10 }
11 
12 
13 http {
14     include       /etc/nginx/mime.types;
15     default_type  application/octet-stream;
16 
17     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
18                       '$status $body_bytes_sent "$http_referer" '
19                       '"$http_user_agent" "$http_x_forwarded_for"';
20 
21     access_log  /var/log/nginx/access.log  main;
22 
23     sendfile        on;
24     #tcp_nopush     on;
25 
26     keepalive_timeout  65;
27 
28     add_header Access-Control-Allow-Origin *;
29     add_header Access-Control-Allow-Headers X-Requested-With;
30     add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
31 
32     upstream myapp.com {  
33             server myapp:10086;  
34             server myapp2:10086; 
35     }  
36     server {
37         listen       80 default_server;
38         listen       [::]:80 default_server;
39         server_name  localhost;
40         
41         # Load configuration files for the default server block.
42         include /etc/nginx/default.d/*.conf;
43 
44         location / {
45         proxy_pass   http://myapp.com;        
46     index        order/goPay; 
47     client_max_body_size    10m;          }
48     }
49     gzip  on;
50     include /etc/nginx/conf.d/*.conf;
51 }

 

 另外两个目录中,内容为空即可,后续nginx运行起来后,日志会自动到logs目录中

 

  4.3 启动Nginx

   

docker run --name mynginx --privileged=true --link myapp:myapp --link myapp2:myapp2 -d -p 80:80 -v /home/docker_nginx/html:/usr/share/nginx/html -v /home/docker_nginx/logs:/var/log/nginx -v /home/docker_nginx/conf/nginx.conf:/etc/nginx/nginx.conf nginx 

--name nginx的名称
--priviledged 当使用外部配置文件时,必须设置为true,否则会报没有权限读取配置文件
--link 连接2个容器,使两个容器可以通信
-v 目录映射,将服务器上的目录映射到docker容器内的目录
-d 端口映射

 

启动后访问  http://192.168.0.187/order/goPay 可以看到,nginx已经正常启动,并已经对后台两个应用实例做了负载均衡

 

 

 

 至此,基于docker做springboot程序的负载均衡部署到此结束。

 

 ps:一些常用的docker命令:

 

查看镜像  docker images
查看容器 docker ps
停止容器 docker stop myapp
删除容器 docker rm myapp
重启容器 docker restart myapp
进入容器 docker exec -it myapp bash
查看日志 docker logs myapp
拉取镜像 docker pull nginx:latest

 

  

 

 

 

 

标签:容器,Springboot,CentOS,nginx,jar,Nginx,myapp,docker,springboot
来源: https://www.cnblogs.com/DevinZhang1990/p/12894742.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有