V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wangxiaoaer
V2EX  ›  问与答

单机 docker 多个容器负载均衡的最简单办法是什么

  •  
  •   wangxiaoaer · 2018-11-25 14:02:06 +08:00 via Android · 2230 次点击
    这是一个创建于 1983 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不考虑 swarm,因为我们就一台装了 docker demaon 的机器,感觉 swarm 有点复杂。

    也不考虑手动写 Nginx 等配置文件的方式,这样把容器个数限死了。

    之前找到了 Dockercloud 的一个借助 haproxy 的 docker-haproxy 可以自动发现容器实例的个数并自动配置,运行时只需要

    Docker run --scale=4

    但这个项目停止维护了。

    有没有别的办法?
    7 条回复    2018-11-26 09:13:07 +08:00
    momocraft
        1
    momocraft  
       2018-11-25 14:14:12 +08:00   ❤️ 1
    nginx 配置裏寫 500 個 upstream, 實際上有幾個後端就 link 幾個
    kslr
        2
    kslr  
       2018-11-25 15:04:37 +08:00
    不想写 nginx 配置?你又没有自动缩放
    大不了写个 shell 自动添加,其他办法只会更麻烦

    或者付钱买
    gamexg
        3
    gamexg  
       2018-11-25 16:28:34 +08:00   ❤️ 1
    https://github.com/jwilder/nginx-proxy

    这个?
    单机用比较合适,作者还有另外一个项目可以支持多机。
    feverzsj
        4
    feverzsj  
       2018-11-25 16:47:40 +08:00
    nginx-proxy 是最简单的,设置 2 个环境变量就可以了
    wangxiaoaer
        5
    wangxiaoaer  
    OP
       2018-11-26 08:50:44 +08:00
    @gamexg #3 不错,不错,可能真是我想要的。
    wangxiaoaer
        6
    wangxiaoaer  
    OP
       2018-11-26 09:03:46 +08:00
    @gamexg

    刚看了下那个项目,中间有一句话:

    Provided your DNS is setup to forward foo.bar.com to the host running nginx-proxy, the request will be routed to a container with the VIRTUAL_HOST env var set.

    也就是说需要本地配置 host 以便把 VIRTUAL_HOST 转发到 nginx-proxy 运行的容器中,但是怎么知道 nginx-proxy 运行的实例的 ip 呢?每次的 ip 可能不一样啊。
    gamexg
        7
    gamexg  
       2018-11-26 09:13:07 +08:00   ❤️ 1
    他指的是主机,不是 docker 容器。
    nginx-proxy 使用 docker -p 参数接管主机的 80、443 端口,docker 负责管理这个端口映射,不需要 dns 知道容器 ip。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1272 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 17:18 · PVG 01:18 · LAX 10:18 · JFK 13:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.