任何在单个节点上不使用Docker Swarm(而不是Docker-Compose)的原因?

有Docker Swarm(现在已经内置到Docker中)和Docker-Compose。 人们似乎只在单个节点上运行容器时使用Docker-Compose。 但是,Docker-Compose不支持任何deployconfiguration值,请参阅https://docs.docker.com/compose/compose-file/#deploy ,其中包括mem_limitcpus ,这似乎很重要能够设置。

所以,也许我应该使用Docker Swarm? 尽pipe我只在一个节点上进行部署。 另外,安装说明对其他人来说也会更简单(不需要安装Docker-Compose)。

但也许有原因,我不应该在单个节点上使用Swarm?

我在下面发布一个答案,但我不确定是否正确。

编辑:请注意,这不是一个基于意见的问题。 如果你看看下面的答案,你会发现有关于这个的“必须”“不能做”的事实。

为了开发,使用Docker-Compose。 因为只有Docker-Compose能够读取您的Docker文件并为您构build图像。 docker堆栈,而不是需要预先构build的图像 。 另外,使用Docker-Compose,您可以轻松地启动和停止单个容器,使用docker-compose kill ...... start ... 这是有用的,在发展(根据我的经验)。 例如,要查看如果杀死数据库,应用程序服务器如何反应。 那么你不希望Swarm直接自动重启数据库。

在生产中,使用Docker Swarm(除非:见下文),所以你可以configurationmem限制。 Docker-Compose具有较less的Docker Swarm的function(例如没有mem或cpu限制),也没有Swarm没有的东西(对吧?)。 所以没有理由在生产中使用Compose。 (除非你知道Compose是如何工作的,不想花费时间阅读新的Swarm命令。)

然而,Docker Swarm并不支持像Docker-Compose这样的.env文件。 所以你不能在.env文件中有例如IMAGE_VERSION=1.2.3 ,然后在docker-compose.yml文件中有: image: name:${IMAGE_VERSION} 。 请参阅https://github.com/moby/moby/issues/29133 – 相反,您需要手动设置env vars: IMAGE_VERSION=SOMETHING docker stack up ... (这实际上使我坚持使用Docker-Compose。 +我没有合理地迅速find如何通过Swarm查看容器的日志; Swarm显得更加复杂。)