有什么理由不在单个节点上使用 Docker Swarm(而不是 Docker-Compose)?

2023-12-27

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

所以也许我应该使用 Docker Swarm?尽管我只在单个节点上部署。另外,安装说明对于其他人来说将更容易遵循(他们不需要安装 Docker-Compose)。

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

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

Edit: Please note that this is not an opinion based question. If you have a look at the answer below, you'll see that there are "have-to" and "cannot-do" facts about this.


对于开发,请使用 Docker-Compose。因为只有 Docker-Compose 能够读取您的 Dockerfile 并为您构建镜像。 Docker Stack 需要预先构建images。此外,使用 Docker-Compose,您可以轻松启动和停止单个容器,docker-compose kill ... and ... start ...。这在开发过程中很有用(根据我的经验)。例如,如果您终止数据库,查看应用程序服务器如何反应。那么你不希望Swarm直接自动重启数据库。

在生产中,使用 Docker Swarm(除非:见下文),这样您就可以配置内存限制。 Docker-Compose 的功能比 Docker Swarm 少(例如没有内存或 CPU 限制),并且没有 Swarm 的任何功能not有(对吗?)。所以没有理由在生产中使用 Compose。 (除非您已经了解 Compose 的工作原理并且不想花时间阅读新的 Swarm 命令。)

但是 Docker Swarm 不支持.env像 Docker-Compose 那样的文件。所以你不能有例如IMAGE_VERSION=1.2.3 in an .env文件,然后在docker-compose.yml文件有:image: name:${IMAGE_VERSION}. See https://github.com/moby/moby/issues/29133 https://github.com/moby/moby/issues/29133— 相反,您需要“手动”设置环境变量:IMAGE_VERSION=SOMETHING docker stack up ...(这实际上让我坚持使用 Docker-Compose。+我没有相当快地找到如何通过 Swarm 查看容器的日志;Swarm 似乎更复杂。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有什么理由不在单个节点上使用 Docker Swarm(而不是 Docker-Compose)? 的相关文章

随机推荐