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

时间:2017-09-01 04:54:42

标签: docker docker-compose docker-swarm

有Docker Swarm(现在内置于Docker中)和Docker-Compose。人们似乎只在单个节点上运行容器时使用Docker-Compose。但是,Docker-Compose不支持任何var a = 5 var p = &a // p holds variable a's memory address fmt.Printf("Address of var a: %p\n", p) fmt.Printf("Value of var a: %v\n", *p) // Let's change a value (using the initial variable or the pointer) *p = 3 // using pointer a = 3 // using initial var fmt.Printf("Address of var a: %p\n", p) fmt.Printf("Value of var a: %v\n", *p) 个配置值,请参阅https://docs.docker.com/compose/compose-file/#deploy,其中包含deploymem_limit,这似乎很好/很重要设置。

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

但也许有理由不在单个节点上使用Swarm?

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

编辑:请注意,这不是基于意见的问题。如果您查看下面的答案,您会看到“必须”“无法做”有关此事实。

2 个答案:

答案 0 :(得分:5)

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

在制作中,使用Docker Swarm(除非:见下文),因此您可以配置mem限制。 Docker-Compose具有较少的功能,Docker Swarm(例如没有mem或cpu限制)并且没有Swarm 所拥有的任何东西(对吧?)。所以没有理由在生产中使用Compose。 (除非您知道Compose如何工作并且不想花时间阅读新的Swarm命令,否则可能。)

但是,Docker Swarm不支持​​像Docker-Compose那样的.env文件。所以你不能拥有,例如IMAGE_VERSION=1.2.3文件中的.env,然后docker-compose.yml文件中的image: name:${IMAGE_VERSION}IMAGE_VERSION=SOMETHING docker stack up ...。请参阅https://github.com/moby/moby/issues/29133 - 相反,您需要“手动”设置env vars:SQL State: 42X01(这实际上让我坚持使用Docker-Compose。+我没有合理地快速找到如何查看容器的日志,通过Swarm; Swarm似乎更复杂。)

答案 1 :(得分:1)

除了@KajMagnus答案,我应该注意,Docker Swarm仍然不像Docker [Compose]那样支持Linux功能。您可以了解此问题,并深入研究Docker社区讨论here