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

 

  

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM