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

标签 networking docker

我想要这个配置:

                   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/

    相关文章:

    c++ - 0MQ 远程登录数据 C++

    linux - TCP ACK 响应延迟 10ms

    c++ - 处理 PVP 游戏中的延迟问题

    c++ - 为什么在 strcpy_s 后我会收到“调试断言失败”的信息?

    Docker:一个网络中容器之间的请求

    linux - 我可以在 docker 容器环境中运行主机命令吗?

    networking - OpenBSD,通过网站身份验证连接到 WPA WiFi

    docker - 尝试从 Docker 容器访问 Kubernetes API 的问题

    docker - 如何将 Docker-compose 管理的 Docker 容器推送到 Heroku?

    python - 在 docker python 上安装 libLAS - 没有这样的文件或目录