使用Docker Compose 实现nginx负载均衡的方法步骤

2025-05-27 0 36

Docker的网络管理,容器的IP设置为基础知识实现Nginx负载均衡

查看所有docker网络

?

1

2

3

4

5

6

7

8

9

10

11

12

13
docker network ls

/*

NETWORK ID NAME DRIVER SCOPE

b832b168ca9a bridge bridge local

373be82d3a6a composetest_default bridge local

a360425082c4 host host local

154f600f0e90 none null local

*/

// composetest_default 是上一篇介绍Compose时,docker-compose.yml文件所在的目录名,

// 所以,用docker-compose创建的容器会默认创建一个以目录名为网络名的网络,并且是dridge(桥接)类型

指定容器IP地址

官网文档地址:https://docs.docker.com/compose/compose-file/#ipv4_address-ipv6_address

继续编写上一篇《12.使用Docker Compose容器编排工具》文章中的docker-compose.yml

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32
version: "3"

services:

web1:

container_name: web1

image: "centos:httpd"

ports:

- "8080:80"

privileged: true

volumes:

- "/app/www/web1/:/var/www/html/"

command: ['/usr/sbin/init']

networks:

nginx-lsb:

ipv4_address: 192.169.0.3

web2:

container_name: web2

image: "centos:httpd"

ports:

- "8081:80"

privileged: true

volumes:

- "/app/www/web2/:/var/www/html/"

command: ['/usr/sbin/init']

networks:

nginx-lsb:

ipv4_address: 192.169.0.2

networks:

nginx-lsb:

driver: bridge

ipam:

config:

- subnet: 192.169.0.0/16

使用docker-compose启动容器

?

1
docker-compose up -d

查看容器是否启动,并确认是否创建了网络 nginx-lsb

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15
// 可以查看当前docker-compose.yml配置的容器组里的容器状态

docker-compose ps

docker network ls

/*

NETWORK ID NAME DRIVER SCOPE

b832b168ca9a bridge bridge local

373be82d3a6a composetest_default bridge local

de6f5b8df1c8 composetest_nginx-lsb bridge local

a360425082c4 host host local

154f600f0e90 none null local

*/

// 创建了nginx-lsb网络,命名是容器组项目的 文件名开头_网络名

查看网络 nginx-lsb的详情

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26
docker network inspect composetest_nginx-lsb

// 详情里面可以看到使用这个网络的每个容器的ip

如:

/*

...

"Containers": {

"039aa860ef04f20a7566fdc943fb4398a61d2ad6dd3e373b17c86ac778af89e3": {

"Name": "web2",

"EndpointID": "1bc206661179e65999015f132c2889d3d4365b8d42b8a89cf9c260016fedd5ee",

"MacAddress": "02:42:c0:a9:00:02",

"IPv4Address": "192.169.0.2/16",

"IPv6Address": ""

},

"437ad7a07da8e46c0abaf845c4b08425338009fbe972bde69478cf47c75c315b": {

"Name": "web1",

"EndpointID": "5a36e602a5364ee9ad06e9816d09e3966d56ebf06b9394ebc25b8bcee9546607",

"MacAddress": "02:42:c0:a9:00:03",

"IPv4Address": "192.169.0.3/16",

"IPv6Address": ""

}

},

...

*/

使用 env_file环境文件:

简单可以理解为:在docker-compose.yml中定义变量,引用在外部.env文件中进行变量定义

官方文档地址:https://docs.docker.com/compose/compose-file/#env_file

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37
// 还是在composetest目录中定义个 .env文件,用来存放变量

web1_addr=192.169.0.2

web2_addr=192.169.0.3

// 修改docker-compose.yml文件,加入变量定义

version: "3"

services:

web1:

container_name: web1

image: "centos:httpd"

ports:

- "8080:80"

privileged: true

volumes:

- "/app/www/web1/:/var/www/html/"

command: ['/usr/sbin/init']

networks:

nginx-lsb:

ipv4_address: ${web1_addr}

web2:

container_name: web2

image: "centos:httpd"

ports:

- "8081:80"

privileged: true

volumes:

- "/app/www/web2/:/var/www/html/"

command: ['/usr/sbin/init']

networks:

nginx-lsb:

ipv4_address: ${web2_addr}

networks:

nginx-lsb:

driver: bridge

ipam:

config:

- subnet: 192.169.0.0/16

重新启动composetest项目,并查看网络详情,确认容器ip是否设置成功

?

1

2

3

4

5
// 重新启动composetest项目

docker-compose up -d

// 查看网络详情

docker network inspect composetest_nginx-lsb

composetest项目中添加一台nginx服务器作为负载均衡服务器

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52
// 在.env文件里添加一个变量 nginx_lsb

web1_addr=192.169.0.2

web2_addr=192.169.0.3

nginx_lsb=192.169.0.100

// 修改docker-compose.yml文件,加入变量定义

version: "3"

services:

nginx-lsb:

container_name: nginx-lsb

image: "centos:nginx"

ports:

- "8000:80"

privileged: true

volumes:

- "/app/nginx/nginx.conf:/etc/nginx/nginx.conf"

networks:

nginx-lsb:

ipv4_address: ${nginx_lsb}

web1:

container_name: web1

image: "centos:httpd"

ports:

- "8080:80"

privileged: true

volumes:

- "/app/www/web1/:/var/www/html/"

command: ['/usr/sbin/init']

networks:

nginx-lsb:

ipv4_address: ${web1_addr}

web2:

container_name: web2

image: "centos:httpd"

ports:

- "8081:80"

privileged: true

volumes:

- "/app/www/web2/:/var/www/html/"

command: ['/usr/sbin/init']

networks:

nginx-lsb:

ipv4_address: ${web2_addr}

networks:

nginx-lsb:

driver: bridge

ipam:

config:

- subnet: 192.169.0.0/16

// 重新启动composetest项目

docker-compose up -d

修改nginx.conf配置文件,配置负载均衡

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16
upstream mydocker {

server 192.169.0.2;

server 192.169.0.3;

}

server {

listen 80;

server_name mydocker;

location / {

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_buffering off;

proxy_pass http://mydocker;

}

}

重新启动nginx-lsb,加载配置文件

?

1
docker-composer restart nginx-lsb

访问 http://服务器IP地址:8000,测试服务器负载均衡

注意:上一篇已经在两台httpd服务器上放置了不同的web文件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:https://segmentfault.com/a/1190000019256121

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 行业资讯 使用Docker Compose 实现nginx负载均衡的方法步骤 https://www.kuaiidc.com/66272.html

相关文章

发表评论
暂无评论