nginx 在不使用docker swarm的情况下使用scale flag时docker如何在容器之间进行负载均衡

sxissh06  于 2023-04-20  发布在  Nginx
关注(0)|答案(1)|浏览(87)

我用两个服务配置了一个docker compose文件:1 node js app和1 nginx作为反向代理。我使用docker compose scale flag来缩放(3)节点容器。
Docker是如何在3个节点容器之间进行流量负载平衡的,但我无法理解,也无法在文档中找到它。你能帮助我理解吗?注意:我没有使用Docker Swarm。
这是我在nginx中使用的配置

worker_processes auto;
events {
    worker_connections 1024;
}
http {
    upstream all {
        server demo:80;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://all;
            proxy_http_version 1.1;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $host;
        } 
    }
}

这是我的docker ps -a的样子

CONTAINER ID   IMAGE      COMMAND                  CREATED        STATUS        PORTS                                     NAMES
c6530cb5e017   demo-app   "docker-entrypoint.s…"   13 hours ago   Up 13 hours   0.0.0.0:49162->80/tcp, :::49162->80/tcp   poc_demo_2
48b410882a89   demo-app   "docker-entrypoint.s…"   13 hours ago   Up 13 hours   0.0.0.0:49161->80/tcp, :::49161->80/tcp   poc_demo_3
858feb84c60b   demo-app   "docker-entrypoint.s…"   13 hours ago   Up 13 hours   0.0.0.0:49160->80/tcp, :::49160->80/tcp   poc_demo_1
1a72a78ba820   nginx      "nginx -g 'daemon of…"   13 hours ago   Up 13 hours   0.0.0.0:80->80/tcp, :::80->80/tcp         poc_nginx_1

我尝试调用节点端点,每次响应都来自不同的容器,我想了解它是如何发生的?

xkrw2x1b

xkrw2x1b1#

您的docker-compose.yaml文件可能定义了两个服务:demonginx。这些名称是第一个重要部分。
当你把这些服务作为docker compose up的一部分时,假设你没有特意定义一个复杂的网络设置,docker正在为它们创建一个单独的网络,让它们共存,第二个重要的部分是,配置每个容器,使它们能够通过各自的名称相互访问。
第三个重要的部分,在你的nginx配置中,你将你的server设置为**demo:80**,这意味着试图通过解析它们的主机名 * demo来访问它的后端 *,docker确保解析为 * 无论你有多少个 * 运行demo应用程序的容器的名称。

相关问题