【问题标题】:Any reasons to not use Docker Swarm (instead of Docker-Compose) on a single node?有什么理由不在单个节点上使用 Docker Swarm(而不是 Docker-Compose)?
【发布时间】:2017-09-01 04:54:42
【问题描述】:

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

所以也许我应该使用 Docker Swarm?虽然我只在单个节点上部署。此外,安装说明对于其他人来说会更简单(他们不需要安装 Docker-Compose)。

但也许我不应该在单个节点上使用 Swarm 的原因是什么?

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

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

【问题讨论】:

    标签: docker docker-compose docker-swarm


    【解决方案1】:

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

    在生产环境中,使用 Docker Swarm(除非:见下文),因此您可以配置内存限制。 Docker-Compose 的功能不如 Docker Swarm(例如没有内存或 cpu 限制),并且没有 Swarm 拥有的任何功能(对吗?)。所以没有理由在生产中使用 Compose。 (除非您已经知道 Compose 的工作原理并且不想花时间阅读新的 Swarm 命令。)

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

    【讨论】:

    • 您对.env 文件的看法是正确的,但此问题通常可以通过以下方式解决:env $(cat .env | grep ^[A-Z] | xargs) docker stack deploy ...
    • 在生产环境中使用 Docker Swarm 的另一个重要原因是适当的机密支持。您可以在 compose 中使用基于文件的机密,在这种情况下它只是被绑定挂载,但这并不安全!
    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    相关资源
    最近更新 更多