我用两个服务配置了一个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
我尝试调用节点端点,每次响应都来自不同的容器,我想了解它是如何发生的?
1条答案
按热度按时间xkrw2x1b1#
您的
docker-compose.yaml
文件可能定义了两个服务:demo
和nginx
。这些名称是第一个重要部分。当你把这些服务作为
docker compose up
的一部分时,假设你没有特意定义一个复杂的网络设置,docker正在为它们创建一个单独的网络,让它们共存,第二个重要的部分是,配置每个容器,使它们能够通过各自的名称相互访问。第三个重要的部分,在你的nginx配置中,你将你的
server
设置为**demo:80
**,这意味着试图通过解析它们的主机名 *demo
来访问它的后端 *,docker确保解析为 * 无论你有多少个 * 运行demo
应用程序的容器的名称。