最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

docker安裝nginx實現(xiàn)對springboot項目的負載均衡的操作方法

 更新時間:2024年06月06日 11:29:24   作者:一顆知足的心  
這篇文章主要介紹了docker安裝nginx實現(xiàn)對springboot項目的負載均衡的操作方法,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧

前言:

本文采用比較經(jīng)典的方式來集成,如果想了解docker-compse方式的,請移步我的下篇文章。

一、安裝docker

請參考我的這篇文章:Docker之路(一)–安裝Docker

二、安裝nginx

docker pull nginx

這個等同于docker pull nginx:latest,都是拉取最新的鏡像版本。這里我們先不著急啟動nginx,先把準備好的三個springboot項目準備好。

三、準備好我們的springboot項目

這里我用了同一個springboot項目,然后分了三個端口來打包,端口分別是8181,8182,8183,測試接口也是用的默認的,現(xiàn)在創(chuàng)建一個最新的springboot項目,會自動生成一個BaseController測試類。這里我們就用它這個默認的接口:/hello

@Controller
public class BasicController {
    // http://127.0.0.1:8181/hello?name=lisi
    @RequestMapping("/hello")
    @ResponseBody
    public String hello(@RequestParam(name = "name", defaultValue = "unknown user") String name) {
        return "Hello " + name;
    }
}

然后,我們分別將這個接口的返回值改一下,根據(jù)端口一一對應(yīng),這樣后面nginx負載均衡的時候,我們就容易判斷是否成功,具體負載到哪一個端口去了。

  • 8181–> return "Hello " + name;
  • 8182–> return “Hello 2” + name;
  • 8183–> return “Hello 3” + name;

四、將springboot項目分別build成docker鏡像

修改項目為三個不同的端口分別打包,然后上傳的linux,目錄如下:

drwxr-xr-x. 2 root root       54 5月  29 10:36 config
	-rw-r--r--. 1 root root      133 5月  29 10:36 Dockerfile
	-rw-r--r--. 1 root root     7172 6月   5 2024 jenkinsTest8182.jar
	-rw-r--r--. 1 root root     7172 6月   5 2024 jenkinsTest8183.jar
	-rw-r--r--. 1 root root     7145 5月   7 17:11 jenkinsTest.jar
	drwxr-xr-x. 2 root root     4096 5月   7 16:49 lib

我這里用的是maven-jar-plugin而不是springboot的maven打包插件,所以目錄會有所不同,springboot的會整體打包,沒有l(wèi)ib和config這個,這里按照你自己需要來就行。如何將jar包build成docker鏡像,參考我這篇文章:Docker之路(二)–用Docker部署一個Web項目。
在本篇文章,我的Dockerfile是這樣寫的:如果你是springboot的打包插件,那么就只需要copy jar包為app.jar就行,不需要copy lib和config這個目錄文件。

FROM openjdk:11
VOLUME /tmp
#這一步需要修改jenkinsTest.jar為三個不同的jar包名稱
COPY jenkinsTest.jar app.jar
#這里每次build我都會修改config下application.properties里面的端口
COPY config config
COPY lib lib
ENTRYPOINT ["java","-jar","/app.jar"]

build成功后看看我們的鏡像:

[root@localhost docker-nginx]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
8183demo           latest    483ecd3a7fff   49 minutes ago   714MB
8182demo           latest    c1fe57a09bc0   49 minutes ago   714MB
8181demo           latest    3b76435d0f75   31 hours ago     714MB

運行這三個項目的鏡像

docker run --name 8181demo -d -p 8181:8181 8181demo
docker run --name 8182demo -d -p 8182:8182 8182demo
docker run --name 8183demo -d -p 8183:8183 8183demo

然后看看瀏覽器能否訪問

這里是看到是OK了的,然后就可以操作我們的nginx了。

五、配置nginx并且啟動

1.啟動前,需要將nginx的配置掛載一份到宿主機上,這樣方便我們修改,而不用每次都進入容器去修改,因為容器里面vim這些指令是沒有的。掛載的參數(shù)是-v(簡易版)或者-mount(復(fù)雜版),這兩個參數(shù)都可已實現(xiàn)掛載,我們后面再討論,這里使用的是-v。

2.-v格式: -v [宿主機絕對路徑]:[容器路徑],
(1)這里我們在宿主機新建目錄/home/docker-nginx,然后在將nginx默認的配置文件:nginx.conf和default.conf復(fù)制一份到/home/docker-nginx下面(這個目錄最好新建,雖然可以自動生成,但是有時候會出麻煩,還有這兩個文件,一定不能是空文件,不是你nginx容器啟動不起來)。
(2)從容器中copy文件:docker cp [容器名字或者id]:容器路徑 宿主機路徑

  docker cp mynginx:/etc/nginx/nginx.conf /home/docker-nginx/nginx.conf
  docker cp mynginx:/etc/nginx/conf.d/default.conf /home/docker-nginx/default.conf

注意,這里容器啟動才能copy,所以要不你先不掛載啟動一個容器copy,要不就去搜一下默認的文件是啥(文章后面我會貼出來)。

3.ngnix完整的啟動命令:掛載兩個conf文件和一個log日志目錄,然后映射ngnix端口為:30001

docker run --name mynginx \
-v /home/docker-nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/docker-nginx/log:/var/log/nginx \
-v /home/docker-nginx/default.conf:/etc/nginx/conf.d/default.conf \
-d -p 30001:80 nginx

4.訪問nginx看是否成功

5.修改nginx配置文件。
這里有兩個文件,一個是nginx.conf和default.conf,這兩者的關(guān)系是:nginx.conf包含了default.conf,這個很關(guān)鍵。
(1)修改nginx.conf:因為我們用的是三個項目的集群,這里我們先將集群配置加到nginx.conf里面,使用upstream標簽,后面名字隨便取,我這里是demo1。上面都有注釋

user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
	#nginx默認配置文件,本文本案例只添加了如下配置
   upstream demo1 {
        server 172.16.72.128:8181;
        server 172.16.72.128:8182;
        server 172.16.72.128:8183;
   }
	#這行就是上面所說的,這兩個文件的包含關(guān)系,在這里引用
    include /etc/nginx/conf.d/*.conf;
}

(2)修改default.conf,將我們定義的upstream demo1添加進location 標簽里面去。

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;
    #access_log  /var/log/nginx/host.access.log  main;
    location / {
    #這行就是我們作的唯一修改
	proxy_pass http://demo1;
       # root   /usr/share/nginx/html;
       # index  index.html index.htm;
    }
    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

負載均衡策略:我們什么都沒有配置,用的是nginx默認的輪詢策略,關(guān)于這點,我們會在后面詳細講解。

6.重啟nginx容器查看是否實現(xiàn)了負載均衡

docker container restart mynginx

瀏覽器訪問同一個URL,看看是否會負載均衡

這里可以看到,我請求了三次,分別返回了三個結(jié)果,然后再請求又從第一個返回,證明了我們的輪詢策略是成功了的。

六、nginx的負載均衡策略

以下配置均采用本文的集群案例,介紹三種常用的。

輪詢策略
默認的策略,不需要額外配置,本文就使用默認的配置。權(quán)重策略
可以為某些服務(wù)器添加權(quán)重,讓該服務(wù)器更多的為用戶提供服務(wù),后面添加weight字段就行。

upstream demo1 {
    server 172.16.72.128:8181 weight=6;
    server 172.16.72.128:8182 weight=3;
    server 172.16.72.128:8183 weight=1;
}

IPHASH策略
同一個ip一只訪問同一個服務(wù)器,缺點就是服務(wù)器炸了就沒法分發(fā)請求。

upstream demo1 {
	ip_hash;
    server 172.16.72.128:8181 weight=6;
    server 172.16.72.128:8182 weight=3;
    server 172.16.72.128:8183 weight=1;
}

七、nginx的常用屬性

down屬性,標記不可用,這樣就不會像這個服務(wù)器分發(fā)請求。

upstream demo1 {
	    server 172.16.72.128:8181 down;
	    server 172.16.72.128:8182;
	    server 172.16.72.128:8183;
	}

BACKUP 備用機設(shè)置,正常情況下該服務(wù)器不會被訪問.當(dāng)主機全部宕機或者主機遇忙時,該服務(wù)器才會訪問.

upstream demo1 {
	    server 172.16.72.128:8181 down;
	    server 172.16.72.128:8182 backup;
	    server 172.16.72.128:8183;
	}

宕機服務(wù)器高可用實現(xiàn)
當(dāng)服務(wù)器宕機時,如果訪問的失敗達到最大失敗次數(shù),則自動標識為down,在一定的周期之內(nèi),如果服務(wù)器恢復(fù)正常,則還會嘗試訪問故障機。
max_fails=10 最大的失敗次數(shù)
fail_timeout=60s; 設(shè)定周期為60秒

upstream demo1 {
	    server 172.16.72.128:8181 max_fails=10 fail_timeout=60s;
	    server 172.16.72.128:8182 max_fails=10 fail_timeout=60s;
	    server 172.16.72.128:8183 max_fails=10 fail_timeout=60s;
	}

八、總結(jié)

以上就是本次文章全部內(nèi)容了,都是比較簡單和基礎(chǔ)的操作,但是一些細節(jié)沒注意還是容易出現(xiàn)問題,歡迎評論區(qū)討論和錯誤糾正,我們Docker之路第四期見。

到此這篇關(guān)于docker安裝nginx實現(xiàn)對springboot項目的負載均衡的文章就介紹到這了,更多相關(guān)springboot項目負載均衡內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker部署rabbitmq集群的實現(xiàn)方法

    docker部署rabbitmq集群的實現(xiàn)方法

    這篇文章主要介紹了docker部署rabbitmq集群的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Docker之Compose的安裝和使用過程

    Docker之Compose的安裝和使用過程

    DockerCompose是用于定義和運行多容器應(yīng)用的工具,通過定義yml文件自動創(chuàng)建或管理容器,簡化了Docker操作,本文詳細介紹了DockerCompose的安裝步驟、版本差異以及基本命令,幫助用戶更好地理解和使用DockerCompose
    2026-04-04
  • docker 突然不能被外網(wǎng)訪問的解決方案

    docker 突然不能被外網(wǎng)訪問的解決方案

    這篇文章主要介紹了docker 突然不能被外網(wǎng)訪問的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Docker Compose 使用實例詳解

    Docker Compose 使用實例詳解

    Docker Compose 是用于定義和運行多容器 Docker 應(yīng)用程序的工具,通過 YAML 文件配置應(yīng)用程序服務(wù),一鍵啟動所有關(guān)聯(lián)容器,這篇文章主要介紹了Docker Compose 使用實例,需要的朋友可以參考下
    2025-04-04
  • docker-compose啟動mongo容器的使用

    docker-compose啟動mongo容器的使用

    這篇文章主要介紹了docker-compose啟動mongo容器的使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Docker?+?jenkins項目打包鏡像部署詳細步驟(親測有效)

    Docker?+?jenkins項目打包鏡像部署詳細步驟(親測有效)

    這篇文章主要介紹了Docker?+?jenkins項目打包鏡像部署的相關(guān)資料,包括Jenkins的安裝、項目搭建、Dockerfile的設(shè)置以及遇到的一些問題和解決方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-04-04
  • docker容器日志時間不一致問題

    docker容器日志時間不一致問題

    這篇文章主要介紹了docker容器日志時間不一致問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Docker部署verdaccio搭建npm私服的實現(xiàn)

    Docker部署verdaccio搭建npm私服的實現(xiàn)

    本女王主要介紹了Docker部署verdaccio搭建npm私服的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • harbor如何更改網(wǎng)段(docker-compose)

    harbor如何更改網(wǎng)段(docker-compose)

    文章介紹了解決Harbor安裝后網(wǎng)段沖突問題的步驟,首先,查看當(dāng)前Docker網(wǎng)橋并獲取網(wǎng)橋ID,然后,關(guān)閉Harbor服務(wù),刪除所有容器和網(wǎng)橋,接著,修改harbor的docker-compose.yaml文件,添加新的網(wǎng)絡(luò)配置,最后,驗證服務(wù)是否正常運行,并確保修改不會被覆蓋
    2026-03-03
  • Docker如何掛載mysql

    Docker如何掛載mysql

    這篇文章主要介紹了Docker如何掛載mysql問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論

琼海市| 舒城县| 天津市| 腾冲县| 泽普县| 尚志市| 上饶县| 区。| 北票市| 安义县| 凯里市| 彩票| 太保市| 临颍县| 襄汾县| 许昌县| 桐庐县| 肥西县| 乌审旗| 乡宁县| 新和县| 那坡县| 德清县| 中西区| 彭山县| 汨罗市| 铁岭市| 怀柔区| 类乌齐县| 勐海县| 齐河县| 临泉县| 吴堡县| 綦江县| 涡阳县| 平利县| 张家口市| 射洪县| 五台县| 自贡市| 孟连|