文章目录
基于Docker配置Nginx负载均衡
准备工作
Docker下载安装运行Nginx服务
Docker部署静态页面项目
创建两个文件夹html-test1 html-test2
# ls
html-test1 html-test2
编辑Dockerfile文件和index.html文件
# tree html-test1
html-test1
├── Dockerfile
└── index.html
Dockerfile
# 设置基础镜像,这里使用最新的nginx镜像,前面已经拉取过了
FROM nginx
# 定义作者 deroy
MAINTAINER deroy
# 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面
COPY index.html /usr/share/nginx/html/
index.html
<html>
<body>
<h1> load balancing page one </h1>
</body>
</html>
同理编辑html-test1和html-test2的index.html文件
<html>
<body>
<h1> load balancing page two </h1>
</body>
</html>
构建静态页面的镜像
通过docker的build命令构建镜像
cd html-test1/
docker build -t htmltest1 ./
同理
cd html-test2/
docker build -t htmltest2 ./
构建完成之后通过 docker images
查看镜像
#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
htmltest1 latest a49eb9b0599e 23 minutes ago 142MB
htmltest2 latest d046a958140b 34 minutes ago 142MB
运行静态页面镜像
docker run --rm -d -p 9090:80 htmltest1
docker run --rm -d -p 9000:80 htmltest2
运行静态页面镜像之后可通过访问服务器的9090和9000端口查看,例如 http://49.234.35.128:9000
运行Nginx镜像
# docker images
nginx latest c316d5a335a5 2 weeks ago 142MB
# docker run --rm -d -p 8000:80 nginx
运行静态页面镜像之后可通过访问服务器的8000端口查看,例如 http://49.234.35.128:8000
配置Nginx负载均衡
进入Nginx容器后台
查看Nginx镜像
# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c0166e8640b htmltest1 "/docker-entrypoint.…" 28 minutes ago Up 28 minutes 0.0.0.0:9090->80/tcp, :::9090->80/tcp nice_khorana
fef9e13ce9b5 htmltest2 "/docker-entrypoint.…" 37 minutes ago Up 37 minutes 0.0.0.0:9000->80/tcp, :::9000->80/tcp stoic_lederberg
4581d6aadcdd nginx "/docker-entrypoint.…" 2 hours ago Up 21 minutes 0.0.0.0:8000->80/tcp, :::8000->80/tcp nginx
通过镜像id 4581d6aadcdd
进入Nginx容器后台
docker exec -it 4581d6aadcdd bash
上面命令的解释说明:
- -it:表示分配一个伪终端。
- nginx:表示容器的名称,这里也可以使用容器ID。
- bash:即/bin/bash表示对容器执行bash操作。
执行过程如图所示
Nginx默认会安装在etc目录下面,进入nginx目录
查看nginx.conf配置文件
我们看最后红框里面的内容,表示使用的是conf.d目录下面的conf文件进行配置。我们进入conf.d目录下面,然后编辑default.conf文件。
安装vim
apt-get update
apt-get install vim
在修改配置文件之前,我们需要获取代理容器的服务ip地址
获取容器元数据
docker inspect 容器id
我们会看到很多信息,这里只需要关注最后的网络配置信息即可
获取到了两个静态页面容器的IP地址以后,我们就可以配置负载均衡了。
编辑default.conf文件
通过config文件配置负载均衡
1.1、负载均衡默认配置(轮询)
默认的负载均衡设置,采用轮询的形式,权重是均衡的。如果想测试建议配置多个nginx监听服务,然后进行测试。非要问个为什么,那就是nginx很轻很小,但是功能很强大!
upstream docker_vue{
server 172.18.0.3:80;
server 172.18.0.5:80;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://docker_vue;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
1.2、负载均衡加权轮询
做4次刷新访问的页面测试,其中有3次会定位到设置权重为3的9000端口对应的ip上,剩余1次定位到9090上。
upstream docker_vue{
server 172.18.0.3:80 weight=3;
server 172.18.0.5:80;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://docker_vue;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
因为容器是内部访问,所以设置的端口是80,而不是运行容器时设置的9000端口。 修改完成之后保存退出。
我们可以使用下面的命令检查一下修改后的配置文件是否有错:
nginx -t
如图所示
我们可以使用下面的命令检查一下修改后的配置文件是否有错:
nginx -t
1
如图所示
由于我们修改了配置,所以需要重新运行容器,以便配置生效。
docker restart 56b926f12269
然后我们在浏览器里面访问8000端口