内容简介:以Docker的网络管理,容器的IP设置为基础知识实现Nginx负载均衡查看所有docker网络指定容器IP地址
以 Docker 的网络管理,容器的IP设置为基础知识实现Nginx负载均衡
查看所有docker网络
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/compo...
继续编写上一篇《12.使用Docker Compose容器编排工具》文章中的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: 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启动容器
docker-compose up -d
查看容器是否启动,并确认是否创建了网络 nginx-lsb
// 可以查看当前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的详情
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/compo...
// 还是在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是否设置成功
// 重新启动composetest项目 docker-compose up -d // 查看网络详情 docker network inspect composetest_nginx-lsb
在composetest项目中添加一台nginx服务器作为负载均衡服务器
// 在.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配置文件,配置负载均衡
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,加载配置文件
docker-composer restart nginx-lsb
访问 http://服务器IP地址 :8000,测试服务器负载均衡!
注意:上一篇已经在两台httpd服务器上放置了不同的web文件
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Programming Amazon Web Services
James Murty / O'Reilly Media / 2008-3-25 / USD 49.99
Building on the success of its storefront and fulfillment services, Amazon now allows businesses to "rent" computing power, data storage and bandwidth on its vast network platform. This book demonstra......一起来看看 《Programming Amazon Web Services》 这本书的介绍吧!