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


     本文将讲解在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

      

  • 相关阅读:
    jQuery全屏滚动插件fullPage.js
    通过定位实现子元素相对于父元素上下左右居中
    TermDocs
    IndexWriter
    lucene demo引出的思考
    第一个LUCENE程序
    lucene3.5的查询语法
    更改只读文件属性为正常
    设置WINDOWS2003服务器的允许外界访问端口,远程桌面的端口更改
    Cookie在域中的读写实现顶级域共享
  • 原文地址:https://www.cnblogs.com/DevinZhang1990/p/12894742.html
Copyright © 2020-2023  润新知