我使用 docker-compose 运行一个小型容器群来支持应用程序。使用 Docker 的内部 DNS 解析器(例如db
解析到数据库后端容器)是其中的关键。我使用通过 创建的私有桥接网络docker network
。
我想知道是否有一种简单直接的方法,既没有 Kubernetes 的繁琐,又可以利用 DNS 发现机制,同时将容器分散到多个物理服务器上。一种选择是在另一台服务器上简单地构建一个单独的 Docker 安装和专用网络,并让这些容器在启动时在我的 PowerDNS 服务器中自行更新 DNS 条目,并且有一个现有的机制可以做到这一点。但是,我更喜欢利用 Docker 的内部 DNS 发现。
任何指点都将不胜感激!
答案1
我建议你研究一下 Docker Swarm,根据我的经验,它更容易设置。它docker-compose.yml
也应该能很好地从你当前的版本扩展。
如果你运行的是最新的 docker-engine,那么你应该已经安装了 swarm,你只需要运行 来启用它docker swarm init
。你可以在以下网址尝试一下:玩转docker。
你可能想看看Bret Fisher 的 github一些示例。该 repo 是作者 Udemy 课程的配套材料,在我看来,它也提供了很好的概述。
答案2
您可以考虑使用 overnode 工具(https://web.archive.org/web/20220629101355/https://overnode.org/) - 它是一个容器编排工具,主要是多主机 docker-compose,无需 swarm。它有一些很棒的功能,比如滚动升级等。(免责声明:我是该项目的作者)
答案3
是的,您可以使用 Docker Swarm 实现这一点。Docker Swarm 为 docker compose 限制提供了解决方案,具有以下引人注目的功能:
- 它使用 Docker Engine CLI 创建一个 Docker Engines 群,您可以在其中部署应用程序服务,而无需任何额外的编排工具。-Swarm 是 Docker Engines 的集群。
- Swarm 管理器自动扩展以达到所需状态 - 轻松扩大和缩小规模
- 服务发现:Swarm 管理器节点为 Swarm 中的每个服务分配唯一的 DNS 名称并对正在运行的容器进行负载平衡。您可以通过 Swarm 中嵌入的 DNS 服务器查询 Swarm 中运行的每个容器。
- 滚动更新和安全性——群中的每个节点都强制 TLS 相互认证和加密,以保护其自身与所有其他节点之间的通信。
如您所见,它具有多节点和主节点 HA 支持。要开始使用 Docker Swarm,请阅读Docker Swarm 101指南。当您对 Docker Swarm 有信心时,请阅读Kubernetes 入门深入 Kubernetes 的指南