Docker部署nginx负载集群

时间:2024-05-21 22:25:52

Docker7.1


在docker中部署nginx集群

有点docker swarm的意思,但存在区别。docker swarm是docker集群,而在这里,有着其他意思。


  1. 首先,docker中存在nginx 镜像。
  2. 其次,实例化生成三个容器。(实例化nginx )
  3. 三台容器的IP地址并不需要修改,在生成容器之初不需要指定bridgesub等选项。其中一台容器为主节点需要端口映射,而其他容器并不需要端口映射。

部署过程

docker pull nginx

docker pull daocloud.io/nginx

拉取镜像使用这两条命令中的任意一个,速度第二个快。

Docker部署nginx负载集群


# 实例化容器,注意镜像名需要更换。作者这边用自己编写的dockerfile生成镜像

docker run -itd --name nginx1 -p 8080:80 centos_nginx /bin/bash
# 返回容器ID64位, 在'docker ps'中可以查到,ID为实例化时[:12]
docker run -itd --name nginx2 centos_nginx /bin/bash

docker run -itd --name nginx3 centos_nginx /bin/bash
# 创建三台nginx容器,主节点为第一台名为'nginx1',因为拥有端口映射。其余nginx容器作为负载均衡。

用另外一个终端去检查docker的虚拟网卡bridge

Docker部署nginx负载集群

根据反馈结果,可以看出来bridge 中的存在nginx1-3它们的网卡信息。

Docker部署nginx负载集群

接下来的步骤是nginx1节点的步骤

# 进入容器的方式

docker exec -it [nginx1节点的ID] /bin/bash
# 三台容器都需要的步骤如下

apt update

apt install vim 
# nginx1需要做的

cd /etc/nginx/ 
vim nginx.conf

Docker部署nginx负载集群

相比于没有修改的nginx.conf 文件,现在多了upstream 172.17.0.2server两个字典。

upstream中,可以指定域名,同样可以指定Ip,但是不需要加端口。因为server中已经开始监听80端口了。如果需要,可以修改80端口。

upstream中,填写三台容器中另外两台子节点。因为它们是负载节点,所以分配它们权重值。

重启nginx服务

service nginx restart
# 这一步执行之后,容器将会关闭。因为当前容器依赖的镜像是nginx镜像

# 然后在外部用docker指令将nginx1启动
docker start [nginx1ID]

接下来的步骤是nginx2节点的步骤

# 进入容器的方式

docker exec -it [nginx2节点的ID] /bin/bash

apt

apt update

apt install vim 

然后只需要修改nginx所使用的默认html文件就可以了。

cd /usr/share/nginx/html/

vim index.html

Docker部署nginx负载集群

仅仅只是在<h1>标签中写了一句From 172.16.0.2:80!当然,主节点nginx1不需要修改html文件。但是nginx2nginx3需要修改html文件。在nginx2html文件中,别写成主机点nginx1IP地址。

nginx3节点和nginx2节点步骤一样,只需要将html中的添加一下当前所处容器的IP+port即可(port可加可不加)


最后,附上效果图:

第一次访问:

Docker部署nginx负载集群

因为之前已经访问过了,所以nginx已经对宿主机的IP进行权重分配了。正常第一次访问的时候,是 可以看到没有显示IP的欢迎界面。(没有IP显示的是nginx1)

多次刷新,将可以看到欢迎页面中的IP地址在变化。