我是 Docker 的新手(但不是 Azure),我想了解在将 Docker 容器部署到 Azure 时应用程序的层通常是如何分离的(我正在考虑使用 Azure 容器服务)。
例如,如果不使用 Docker,我会将一个 VM 放置在 Web 层/子网中,将一个 VM 放置在数据库层/子网中,并相应地设置 NSG 规则。
如何使用 Docker 实现这一点,我是否应该将 Docker 部署到多个子网中,或者是否只使用一个子网,将所有容器部署到该子网中,然后以某种方式设置这些容器之间的网络规则?
谢谢
答案1
Docker Swarm-mode 在您的 docker-compose 文件中具有网络定义的概念,它提供了一种细粒度的网络分段形式。如果这还不够,那么您可以在不同的网络段中运行单独的 Docker 实例,并使用非群集机制让服务相互查找。
答案2
如何使用 Docker 实现这一点,我是否应该将 Docker 部署到多个子网中,或者只部署一个子网。
在 Azure 容器服务中,如果我们选择 kubernetes,Azure 会为主节点和节点创建多个子网。
容器使用集群 IP(与 Azure VM IP 不同)地址与其他容器通信,如果我们希望此容器可以从互联网访问,我们可以使用 Azure 将这个容器暴露给互联网公共负载均衡器,然后使用此公共 IP 地址从 Internet 访问它。此 Vnet 中的 Azure VM 无法与容器通信。
因此,如果我们选择 Kubernetes,我们可以创建多个容器作为数据库服务器,并创建另一个容器作为 Web 服务器,将 Web 容器连接到数据库容器,然后将此 Web 容器暴露到 Internet,这样我们就可以通过 Azure 负载均衡器公共 IP 地址访问此 Web 容器。一个豆荚,不同的 pod 具有不同的 pod CIDR。
Kubernetes 是一个开源的、生产级的容器编排工具,下图展示了 kubernetes 在 Azure 上的运行方式:
如果要使用docker部署多个容器,需要设计网络,不同的子网,不同的网桥网络等。最方便的方法是使用容器编排工具,比如kubernetes,swarm或者DC/OS。