Docker7.1
在docker中部署nginx集群
有点
docker swarm
的意思,但存在区别。docker swarm
是docker集群,而在这里,有着其他意思。
- 首先,docker中存在
nginx
镜像。 - 其次,实例化生成三个容器。(实例化
nginx
) - 三台容器的IP地址并不需要修改,在生成容器之初不需要指定
bridge
和sub
等选项。其中一台容器为主节点需要端口映射,而其他容器并不需要端口映射。
部署过程
docker pull nginx docker pull daocloud.io/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
根据反馈结果,可以看出来
bridge
中的存在nginx1-3它们的网卡信息。
接下来的步骤是nginx1
节点的步骤
# 进入容器的方式 docker exec -it [nginx1节点的ID] /bin/bash
# 三台容器都需要的步骤如下 apt update apt install vim
# nginx1需要做的 cd /etc/nginx/ vim nginx.conf
相比于没有修改的
nginx.conf
文件,现在多了upstream 172.17.0.2
和server
两个字典。在
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
仅仅只是在
<h1>
标签中写了一句From 172.16.0.2:80!
当然,主节点nginx1
不需要修改html
文件。但是nginx2
和nginx3
需要修改html
文件。在nginx2
的html
文件中,别写成主机点nginx1
的IP
地址。
nginx3
节点和nginx2
节点步骤一样,只需要将html
中的添加一下当前所处容器的IP
+port
即可(port
可加可不加)
最后,附上效果图:
第一次访问:
因为之前已经访问过了,所以nginx已经对宿主机的IP进行权重分配了。正常第一次访问的时候,是 可以看到没有显示IP的欢迎界面。(没有IP显示的是nginx1)
多次
刷新,将可以看到欢迎页面中的IP地址在变化。