【问题标题】:docker-compose swarm without docker-machinedocker-compose swarm 没有 docker-machine
【发布时间】:2016-09-17 01:26:40
【问题描述】:
在查看了 docker 官方 swarm 的解释后,github 问题和 stackoverflow 的答案我仍然不知道为什么我会遇到我遇到的问题。
手头的问题:docker-compose up 启动不在 swarm 中的服务,即使 swarm 处于活动状态并且有 2 个节点。
我使用的是 1.12.1 docker 版本。
查看swarm tutorial,我能够使用docker service create 启动和扩展我的群,没有任何问题。
使用版本 2 docker-compose.yml 运行 docker-compose up 会导致服务在 swarm 之外启动,我可以通过 docker ps 看到它们,但不能通过 docker service ls 看到它们
我可以看到 docker-machine 是解决这个问题的工具,但它又需要安装 virtual box。
所以我的问题是
我可以在没有 docker-machine 和 experimental build 捆绑功能的情况下将 docker-compose 与 docker-swarm(不是 docker-engine)一起使用吗?
如果docker service create 可以在任何节点上启动服务,是否表明swarm 的网络配置正确?
docker-machine 与实验性构建功能的优缺点是什么
【问题讨论】:
标签:
docker
docker-compose
docker-machine
【解决方案1】:
1) 否。Docker Compose 尚未与新的 Swarm 模式集成。 Issue 3656 in GitHub 正在跟踪它。如果你现在使用 Docker Compose 在 swarm 上启动容器,它会使用 docker run 来启动容器,这就是为什么你会在一个节点上看到它们。
2) 是的。实际上,您可以在管理器上使用docker node ls 来确认所有节点都已启动并处于活动状态,并使用docker node inspect 来检查特定节点,您无需创建服务来验证集群。
3) Docker Machine 也落后于 1.12 版本,因此如果您使用 Docker Machine 启动 swarm,它将是“旧”类型的 swarm。旧的 Docker Swarm 产品需要为键值存储、TLS 等进行大量额外设置,而 Swarm 模式可以免费提供。
【解决方案2】:
1) 您无法在新的 Docker“Swarm 模式”上使用 docker-compose 启动服务。有一个功能可以将 docker-compose 文件转换为新的 swarm 模式可以理解的新 dab 格式,但目前尚不完整且处于试验阶段。你现在基本上需要使用 bash 脚本来启动服务。
2) swarm(swarm 模式)中的节点使用它们自己的覆盖网络进行交互。当您使用docker network ls 时,它的名称为ingress。您需要设置自己的覆盖网络来运行服务。例如:
docker network create -d overlay mynet
docker service create --name serv1 --network mynet nginx
3)我不确定您所说的“实验性构建”是什么功能。docker-machine 只是一种创建主机(节点)的方法。它有助于在每个主机上设置 docker 守护程序,证书并允许一些基本的维护(更新证书,停止/启动主机,如果你是创建它的人)。它不会创建服务、卷、网络或管理它们。这是 docker api 的工作。
【讨论】:
-
我明白了,我是否正确理解安装 virtualbox 是确保 docker-machine 可以按照here 所述创建集群的唯一方法?
-
@Stobor 不,这是旧的 docker swarm,而不是新的 swarm 模式。是的……令人困惑不是吗?好消息是,使用 docker-machine 创建集群并不容易。见:stackoverflow.com/questions/38666566/…
-
你不能使用 Docker for Mac/Windows 创建一个集群,因为你最终只有一个主机。一个 swarm 至少需要 3 个主机。 Docker-machine 对于创建多个组成集群的主机很有用,但正如@MarkO'Connor 提到的,请注意不要与与旧(传统)Swarm 相关的文档混淆。确保遵循引擎文档 (docs.docker.com/engine/swarm) 下的“群模式”文档。