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

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文件

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

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

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:Docker下利用jenkins和docker实现持续交付

2023-4-3 10:17:37

建站知识

小知识:docker 查询或获取私有仓库(registry)中的镜像的方法

2023-4-3 10:32:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索