简介
- 在同一台主机中,使用docker搭建nginx集群。
- 创建三个nginx容器,其中一台需要进行宿主主机的端口映射作为主服务器,其余容器不需要端口映射,也不需要配置桥接网络,默认即可。
实操
创建容器
-
获取镜像:
docker pull daocloud.io/nginx
。
-
docker run -itd --name nginx_master -p 8080:80 daocloud.io/nginx /bin/bash
创建nginx主服务容器,将容器的80端口映射到宿主主机的8080端口。
- 发现访问:
http://localhost:8081
, 并不能访问, 因为是nginx服务默认没有启动,docker exec -it nginx_master bash
进入容器,/usr/sbin/nginx
启动nginx服务即可。
- 发现访问:
-
创建两个从nginx容器:
docker run -itd --name nginx_slave1 daocloud.io/nginx /bin/bash
docker run -itd --name nginx_slave2 daocloud.io/nginx /bin/bash
然后需要分别启动nginx_slave1和nginx_slave2的nginx服务, 请参考主nginx的启动。
配置nginx
- 三个容器均需要进行
apt update && apt install vim
。 - 打开一个终端查看容器的网络信息:
docker network ls
docker network inspect 对应你实际NETWORK ID
主nginx配置
- 进入主nginx容器
docker exec -it nginx_master bash
:
- 修改主nginx配置
vim /etc/nginx/conf.d/default.conf
的默认站点配置:
upstream 172.17.0.2 {
server 172.17.0.3 weight=10; # 对应nginx_slave1
server 172.17.0.4 weight=20; # 对应nginx_slave2
}
server {
listen 80;
server_name 172.17.02;
location / {
proxy_pass http://172.17.0.2;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
service restart nginx
重启服务。
从nginx配置
-
在两个slave容器中,分别修改默认站点的首页,添加各自的ip来标识。
vim /usr/share/nginx/html/index.html
-
nginx_slave2:
-
nginx_slave1
至此已经部署完一个简单的集群。
效果图