有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,其中包含deploy
和mem_limit
,这似乎很好/很重要设置。
所以也许我应该使用Docker Swarm?虽然我只在单个节点上部署。此外,安装说明将更容易让其他人遵循(他们不需要安装Docker-Compose)。
但也许有理由不在单个节点上使用Swarm?
我在下面发布了一个答案,但我不确定它是否正确。
编辑:请注意,这不是基于意见的问题。如果您查看下面的答案,您会看到“必须”和“无法做”有关此事实。
答案 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。