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

docker安裝nginx實(shí)現(xiàn)對(duì)springboot項(xiàng)目的負(fù)載均衡的操作方法

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

前言:

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

一、安裝docker

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

二、安裝nginx

docker pull nginx

這個(gè)等同于docker pull nginx:latest,都是拉取最新的鏡像版本。這里我們先不著急啟動(dòng)nginx,先把準(zhǔn)備好的三個(gè)springboot項(xiàng)目準(zhǔn)備好。

三、準(zhǔn)備好我們的springboot項(xiàng)目

這里我用了同一個(gè)springboot項(xiàng)目,然后分了三個(gè)端口來打包,端口分別是8181,8182,8183,測(cè)試接口也是用的默認(rèn)的,現(xiàn)在創(chuàng)建一個(gè)最新的springboot項(xiàng)目,會(huì)自動(dòng)生成一個(gè)BaseController測(cè)試類。這里我們就用它這個(gè)默認(rèn)的接口:/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;
    }
}

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

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

四、將springboot項(xiàng)目分別build成docker鏡像

修改項(xiàng)目為三個(gè)不同的端口分別打包,然后上傳的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打包插件,所以目錄會(huì)有所不同,springboot的會(huì)整體打包,沒有l(wèi)ib和config這個(gè),這里按照你自己需要來就行。如何將jar包build成docker鏡像,參考我這篇文章:Docker之路(二)–用Docker部署一個(gè)Web項(xiàng)目。
在本篇文章,我的Dockerfile是這樣寫的:如果你是springboot的打包插件,那么就只需要copy jar包為app.jar就行,不需要copy lib和config這個(gè)目錄文件。

FROM openjdk:11
VOLUME /tmp
#這一步需要修改jenkinsTest.jar為三個(gè)不同的jar包名稱
COPY jenkinsTest.jar app.jar
#這里每次build我都會(huì)修改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

運(yùn)行這三個(gè)項(xiàng)目的鏡像

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并且啟動(dòng)

1.啟動(dòng)前,需要將nginx的配置掛載一份到宿主機(jī)上,這樣方便我們修改,而不用每次都進(jìn)入容器去修改,因?yàn)槿萜骼锩鎣im這些指令是沒有的。掛載的參數(shù)是-v(簡(jiǎn)易版)或者-mount(復(fù)雜版),這兩個(gè)參數(shù)都可已實(shí)現(xiàn)掛載,我們后面再討論,這里使用的是-v。

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

  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

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

3.ngnix完整的啟動(dòng)命令:掛載兩個(gè)conf文件和一個(gè)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配置文件。
這里有兩個(gè)文件,一個(gè)是nginx.conf和default.conf,這兩者的關(guān)系是:nginx.conf包含了default.conf,這個(gè)很關(guān)鍵。
(1)修改nginx.conf:因?yàn)槲覀冇玫氖侨齻€(gè)項(xiàng)目的集群,這里我們先將集群配置加到nginx.conf里面,使用upstream標(biāo)簽,后面名字隨便取,我這里是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默認(rèn)配置文件,本文本案例只添加了如下配置
   upstream demo1 {
        server 172.16.72.128:8181;
        server 172.16.72.128:8182;
        server 172.16.72.128:8183;
   }
	#這行就是上面所說的,這兩個(gè)文件的包含關(guān)系,在這里引用
    include /etc/nginx/conf.d/*.conf;
}

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

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;
    #}
}

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

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

docker container restart mynginx

瀏覽器訪問同一個(gè)URL,看看是否會(huì)負(fù)載均衡

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

六、nginx的負(fù)載均衡策略

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

輪詢策略
默認(rèn)的策略,不需要額外配置,本文就使用默認(rèn)的配置。權(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策略
同一個(gè)ip一只訪問同一個(gè)服務(wù)器,缺點(diǎn)就是服務(wù)器炸了就沒法分發(fā)請(qǐng)求。

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屬性,標(biāo)記不可用,這樣就不會(huì)像這個(gè)服務(wù)器分發(fā)請(qǐng)求。

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

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

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

宕機(jī)服務(wù)器高可用實(shí)現(xiàn)
當(dāng)服務(wù)器宕機(jī)時(shí),如果訪問的失敗達(dá)到最大失敗次數(shù),則自動(dòng)標(biāo)識(shí)為down,在一定的周期之內(nèi),如果服務(wù)器恢復(fù)正常,則還會(huì)嘗試訪問故障機(jī)。
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é)

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

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

相關(guān)文章

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

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

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

    Docker之Compose的安裝和使用過程

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

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

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

    Docker Compose 使用實(shí)例詳解

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

    docker-compose啟動(dòng)mongo容器的使用

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

    Docker?+?jenkins項(xiàng)目打包鏡像部署詳細(xì)步驟(親測(cè)有效)

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

    docker容器日志時(shí)間不一致問題

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

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

    本女王主要介紹了Docker部署verdaccio搭建npm私服的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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ò)配置,最后,驗(yàn)證服務(wù)是否正常運(yùn)行,并確保修改不會(huì)被覆蓋
    2026-03-03
  • Docker如何掛載mysql

    Docker如何掛載mysql

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

最新評(píng)論

松阳县| 哈巴河县| 驻马店市| 六盘水市| 格尔木市| 宁陕县| 奉新县| 安庆市| 昭通市| 镇江市| 南召县| 灵寿县| 柳林县| 汤阴县| 清新县| 盐池县| 彭山县| 和静县| 汶川县| 临猗县| 台北县| 普陀区| 安徽省| 安吉县| 南涧| 曲阳县| 朝阳区| 丁青县| 烟台市| 明溪县| 甘泉县| 余庆县| 正定县| 县级市| 沂南县| 寻甸| 南京市| 电白县| 奇台县| 鱼台县| 和平区|