gpt4 book ai didi

networking - 如何使 docker 容器与主机无关

转载 作者:行者123 更新时间:2023-12-02 20:27:44 26 4
gpt4 key购买 nike

我想要这个配置:

                   webcontainer1
/
/
haproxy_container
\
\
webcontainer2

这三个组件都是 docker 容器。
是的,我可以 --link 它们,并将容器名称放入 haproxy 配置中,一切正常,前提是所有 3 个都在同一主机上。

但是,我希望能够根据需要将我的 web 容器移动到其他主机,而无需更改 haproxy 的配置。

换句话说,我希望我的配置与我的 Web 容器的运行位置无关:是否相同的主机,我希望它们可以通过名称简单地 ping。

怎么做?

附言我知道如何将端口从容器转发到主机,并且我知道我可以将我的网络容器的名称替换为我将它们移动到的主机的名称——这不符合答案的条件。

目标是在不更改任何配置的情况下自由移动事物。

最佳答案

我使用下一种方法运行与自己的静态 ips 绑定(bind)的大部分 dockerized 服务:

  • 我为 docker 主机
  • 上的所有服务创建 ip 别名
  • 然后我运行每个服务将端口从这个 ip 重定向到容器中,这样每个服务都有自己的静态 ip,可以被外部用户和其他容器使用。
  • 所有容器都使用 ips 或域名来访问其他容器。

  • 现在我可以将容器(使用 ip 别名)移动到任何其他 docker 主机,所有其他容器将继续使用它 - 无需触摸它们。

    样本:
    docker run --name dns --restart=always -d -p 172.16.177.20:53:53/udp dns
    docker run --name registry --restart=always -d -p 172.16.177.12:80:5000 registry
    docker run --name cache --restart=always -d -p 172.16.177.13:80:3142 -v /data/cache:/var/cache/apt-cacher-ng cache
    docker run --name mirror --restart=always -d -p 172.16.177.19:80:80 -v /data/mirror:/usr/share/nginx/html:ro mirror
    ...

    回复评论(因为评论太长了):

    1) 正确 - 我什至不需要知道容器的 IP - 我正在使用静态 IP 地址来处理容器中的服务

    2)是的,容器不可ping通,只有必要的端口暴露在那里

    3) ip aliases是单个接口(interface)的附加 IP 地址。

    作为映射到 ip 别名的每个容器的必要端口 - 我不需要了解有关容器的任何其他信息,我只是使用 ip:port(或 name:port)来处理它。额外的好处 - 我有多个容器映射在同一主机中公开端口 80 - 我不需要使用代理或不同的端口: http://service1http://service2正在工作 - 因为它们有不同的 IP 地址(它们是别名,我可以有很多)。

    关于networking - 如何使 docker 容器与主机无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29314423/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com