有点
docker swarm
的意思,但存在区别。docker swarm
是docker集群,而在这里,有着其他意思。
首先,docker中存在
nginx
镜像。其次,实例化生成三个容器。(实例化
nginx
)三台容器的IP地址并不需要修改,在生成容器之初不需要指定
bridge
和sub
等选项。其中一台容器为主节点需要端口映射,而其他容器并不需要端口映射。
部署过程
docker pull nginx docker pull daocloud.io/nginx123拉取镜像使用这两条命令中的任意一个,速度第二个快。
# 实例化容器,注意镜像名需要更换。作者这边用自己编写的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容器作为负载均衡。12345678用另外一个终端去检查
docker
的虚拟网卡bridge
根据反馈结果,可以看出来
bridge
中的存在nginx1-3它们的网卡信息。
接下来的步骤是nginx1
节点的步骤
# 进入容器的方式docker exec -it [nginx1节点的ID] /bin/bash123
# 三台容器都需要的步骤如下apt update apt install vim12345# nginx1需要做的cd /etc/nginx/ vim nginx.conf1234
相比于没有修改的
nginx.conf
文件,现在多了upstream 172.17.0.2
和server
两个字典。在
upstream
中,可以指定域名,同样可以指定Ip,但是不需要加端口。因为server
中已经开始监听80端口了。如果需要,可以修改80端口。
upstream
中,填写三台容器中另外两台子节点。因为它们是负载节点,所以分配它们权重值。
重启
nginx
服务service nginx restart# 这一步执行之后,容器将会关闭。因为当前容器依赖的镜像是nginx镜像# 然后在外部用docker指令将nginx1启动docker start [nginx1ID]12345
接下来的步骤是nginx2
节点的步骤
# 进入容器的方式docker exec -it [nginx2节点的ID] /bin/bash123
apt
apt update apt install vim123然后只需要修改nginx所使用的默认
html
文件就可以了。cd /usr/share/nginx/html/ vim index.html123
仅仅只是在
<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地址在变化。