Docker:直接子域到特定容器

时间:2016-02-10 17:15:48

标签: apache docker

我是码头工作者的新手,因此如果已经回答了道歉,但我看起来并不知道如何搜索它所以我想我会问一个问题,如果它已经回答了,至少有人知道这是如何工作的,可以帮助我。

所以这就是我想要做的。

子域x.x.com(IP A)

  • 容器A
  • 容器B
  • Container C -webserver

子域名y.x.com(IP B(或者它甚至可能是A,我不知道什么是最好的)

  • 容器D(与容器A相同但用户不同)
  • 容器E(与容器B相同但用户不同)
  • Container F -webserver(与容器C相同但用户不同)

这是我的问题

  1. 对于子域名y.x.com,我应该使用相同的IP还是不同的IP?
  2. 如何将这些子域指向特定容器,以便在端口y.x.com:8000处有容器时,只需执行y.x.com:8001即可访问容器x.x.com:8001?
  3. 如何确保两个网络服务器都可以通过不同的子域访问(假设它们都在端口80上运行?)
  4. 我不是百分百肯定我已经理解了使用docker时网络的工作方式,所以任何指针都会非常有用。我应该使用链接吗?我应该使用--net = bridge吗?有没有更简单的方法可以做到这一点?什么是最好的方式?

    提前谢谢

1 个答案:

答案 0 :(得分:0)

首先,澄清您要配置的内容非常重要。您是否将Apache服务器配置为两个子域的前端?你在容器中运行apache吗?容器A,B,D和E中有什么?他们是否为Web服务器(例如数据库)提供支持服务?

除了这些说明之外,您需要了解的有关Docker网络的最重要的事情是,默认情况下,容器会接收属于“虚拟网络”的IP。仅存在于运行它们的主机中。因此,他们无法从外部世界访问#34; (即使他们可以通过将主机用作网关来访问外部世界)。

在这种情况下,从外部世界访问容器的最直接方式是#34;是使用端口映射,在其中将端口从物理主机映射到容器端口。

例如,假设您的主机具有IP 10.0.0.1,并且您的容器在端口80上运行Web服务器。要访问此容器,首先需要启动容器并将其端口80映射到物理主机中的某个端口。这看起来像是:

docker run -d -p 8000:80 <image> <command>

其中-p是用于映射端口的相关选项(在这种情况下,您将物理主机中的端口8000映射到容器中的端口80)。因此,要访问容器Web服务器,您需要使用带有映射端口(10.0.0.1:8000)的主机IP - 并且请求将被重定向到容器的端口80

因此,假设您在同一主机上运行所有容器,可以将每个子域映射到相同的IP但不同的端口,并将每个端口映射到容器C和F的端口80。

说完所有这些之后,最近的Docker版本已经添加了许多配置网络的新方法,但我觉得在转向更复杂的场景之前理解基本行为非常重要。

请查看此处的基本配置说明:

https://docs.docker.com/engine/userguide/containers/networkingcontainers/