使用nginx作负载均衡就是修改一个配置文件的事情,网上大部分教程都是在本机去安装nginx作的,可是为何不能使用docker更加方便的去作这件事情呢,今天个人想法就是用docker跑nginx而后来作一个负载均衡的实验html
其实这个环境很简单,就是四台centos机器,而后都安装上了docker,也就是下面这三台机器nginx
注意最好安装上ansible,由于这样最集群的操做就比较方便起来了web
以后集体pullnginx镜像docker
ansible docker -m shell -a "docker pull nginx:1.15.1-alpine"
shell
我使用docker-master节点上的nginx作负载均衡centos
docker-slave的全部节点都是网页服务器bash
首先编写nginx的配置文件服务器
docker run -d nginx:1.15.1-alpine
app
把镜像里面的配置文件复制出来负载均衡
docker cp e08247c36eac:/etc/nginx/nginx.conf .
以后修改为下面这个样子
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; 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; upstream 192.168.1.231 { server 192.168.1.232:8080; server 192.168.1.233:8080; server 192.168.1.234:8080; } server { listen 80; server_name 192.168.1.231; location /{ proxy_pass http://192.168.1.231; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } include /etc/nginx/conf.d/*.conf; }
其实就是加上了upstream和server这两段
以后新建一个dockerfile,加入
FROM nginx:1.15.1-alpine COPY nginx.conf /etc/nginx
其实就是把配置文件拷贝到容器里面去
以后新建一个docker-compose文件
加入
version: "3" services: nginx: container_name: "nginx" build: . ports: - "80:80" networks: app_net: ipv4_address: "172.16.11.11" restart: "always" networks: app_net: driver: "bridge" ipam: driver: "default" config: - subnet: "172.16.11.11/24"
这个很少解释了
最后启动起来
docker-compose -f docker-compose.yml up -d
此时若是你访问231服务器会报502错误说明几乎成功一半了
首先编写compose文件
version: "3" services: nginx: container_name: nginx image: nginx:1.15.1-alpine volumes: - "/home/docker/nginx/html:/usr/share/nginx/html" ports: - "8080:80" networks: app_net: ipv4_address: "172.16.11.11" networks: app_net: driver: "bridge" ipam: driver: "default" config: - subnet: "172.16.11.11/24"
使用ansible分发文件
ansible docker-slave -m copy -a "src=/root/docker-compose.yml dest=/root/docker-compose.yml"
分发docker-compose这个命令
ansible docker-slave -m copy -a "src=/usr/local/bin/docker-compose dest=/usr/local/bin/docker-compose"
ansible docker-slave -m shell -a "chmod +x /usr/local/bin/docker-compose"
以后在全部节点启动容器
ansible docker-slave -m shell -a "docker-compose -f /root/docker-compose.yml up -d"
以后编写一个index.html文件,里面随便写点什么好比hello slave-1,而后分发给192.168.1.232,其余的也都同样
ansible slave-1 -m copy -a "src=/root/index.html dest=/home/docker/nginx/html/index.html"
最后的验证就是输入192.168.1.231的ip不断的刷新,里面会不断重复hello slave-1或者hello slave-2或者hello slave-3
欢迎关注Bboysoul的博客www.bboysoul.com Have Fun