docker(二) - nginx负载均衡搞一搞

镜像下载

docker pull nginx

创建一个网络

docker network create network

这里最后面的'network'是我们自己给这个网络起得名字

目的是什么呢,我们自定义创建一个网络,是为了将一会创建的容器放到同一个网络环境中,他们之间才好通信。

默认的网络是桥接的方式,也就是容器通过宿主机可以访问外界网络。宿主机也可以访问到每个容器,但是容器之间是不能互相访问的。具体参见这里

启动三个nginx容器

lua 复制代码
docker run -d --network network --name nginx-1 -p 8080:80 nginx:latest
docker run -d --network network --name nginx-2 nginx:latest
docker run -d --network network --name nginx-3 nginx:latest

-p 将容器的指定端口映射到主机的指定端口,这里是将容器的80端口映射到主机的8080端口
--name 后面跟的 master 是自己设置的容器名
-d 指将在后台运行容器,并返回容器ID
--network 就是将这个容器加到network这个网络中

编辑nginx-1的配置文件

可以用装mysql那一期的方法,覆盖去改;也可以把宿主机的文件直接映射挂载过去;也可以直接进容器里编辑去改,这就直接编辑了。

bash 复制代码
docker exec -it nginx-1 bash

安装 vim 和 ping 命令

bash 复制代码
sed -i "s/deb.debian.org/mirrors.aliyun.com/g" /etc/apt/sources.list
apt update
apt install -y vim iputils-ping

装好之后可以直接ping一下,正常是可以ping通的

复制代码
ping nginx-2
ping nginx-3
arduino 复制代码
vim /etc/nginx/conf.d/default.conf

在最上面加,这里的backend是起得名字,下面proxy_pass里需要一样

ini 复制代码
upstream backend { 
    server nginx-2; 
    server nginx-3; 
}

下面server中的location里面的配置进行修改保存

arduino 复制代码
location / {
    # root /usr/share/nginx/html;
    # index index.html index.htm;
    proxy_pass http://backend;
}

然后我们直接在容器里面来测试一下改的有没有问题

复制代码
nginx -t

没问题之后咱们退出容器去重启这个容器,有问题咱们直接在容器里看日志解决就可以

复制代码
docker restart nginx-1

测试一下

在nginx-1容器里curl 127.0.0.1是看不出来这个负载均衡到底配没配成功了,因此咱们改下nginx-2和nginx-3里面的html内容,就可以很直观的看到是哪台机器。

进入容器 nginx-2
bash 复制代码
docker exec -it nginx-2 bash
echo 'ngxin 2 号服务器'  >  /usr/share/nginx/html/index.html
进入容器 nginx-3
bash 复制代码
docker exec -it nginx-3 bash
echo 'ngxin 3 号服务器'  >  /usr/share/nginx/html/index.html
进入容器 nginx-1
复制代码
curl 127.0.0.1

浏览器也可以直接看到

直接访问外网ip:8080 就可以啦

问题合集

  1. 启动之后发现忘记加到一个网络中了,除了删了重建还有啥方法
arduino 复制代码
docker network connect network nginx-1
  • 后面的network是我们上面自建的网络名
  • nginx-1 就是我们的容器

参考文章

相关推荐
jyOverQ1 小时前
RabbitMQ 消息积压怎么办?Prefetch、消费者并发与扩容
分布式·后端·rabbitmq
Sayai1 小时前
Elasticsearch 9 安装验证实战:start-local 一键部署 + Docker 手动安装踩坑指南
大数据·elasticsearch·docker
名字还没想好☜7 小时前
Docker 容器安全加固实战:非 root、只读根文件系统、drop capabilities 与最小攻击面
运维·安全·docker·容器·kubernetes
码--到成功8 小时前
Docker、Kubernetes安装系列 二
docker·容器·kubernetes
东风破_8 小时前
从跨域到 WebSocket:前端跨域方案、SSE 与双向实时通信详解
前端·后端
M--Y9 小时前
Docker镜像与仓库管理详解
docker·容器
starzy19909 小时前
虚拟化解决方案全景:软件虚拟化、硬件虚拟化与 Docker 的位置
运维·docker·容器
行百里er10 小时前
Gateway 上别硬塞 MVC:DeferredImportSelector 看菜下锅
spring boot·后端·开源
名字还没想好☜10 小时前
Java 遍历时删元素抛 ConcurrentModificationException:fail-fast 原理与三种正确删法
后端
IT_陈寒11 小时前
React Hooks闭包陷阱差点让我加班到凌晨
前端·人工智能·后端