docker-compose 是一个自我修复的协调器吗?

is docker-compose a self healing orchestrator?

kubernetes 中,如果 pod 由于某种原因宕机,admission controller 将重新启动它。

我们称这种机制为自我修复。

我从未使用过 docker-compose,但我想知道:它是一样的吗?

当使用 docker-compose 或现在 docker compose(使用 space)部署时,您将部署到单个节点。您可以将服务定义为使用处理崩溃应用程序的 restart policy 自动重启。但是,在某些情况下,网络或卷等外部性不处于良好状态,我已经看到导致定义被 docker 视为无效,此时它停止尝试重新启动服务。

还有Swarm Mode,它是像Kubernetes一样的编排器,它可以使用docker-compose.yml定义目标状态,它会不断重启服务以从中断中恢复,并将它们迁移到另一个节点当集群中的一个节点出现故障时。

  • docker-compose 本身并不是真正的容器编排器。
  • 它只是一个允许您 运行 将服务及其依赖项作为一个单元的客户端。 docker-compose 确实有一个重启策略,可以在容器崩溃或发生其他事情时重启容器
  • 如果运行ning容器所在的节点宕机,docker-compose将无法重启容器,您将面临服务中断
  • Docker Swarm 和 Kubernetes 是服务器,而不仅仅是客户端,因此它们是更全面的编排器

要在 docker 的上下文中实现自我修复,可以像在 Kubernetes 中一样创建服务。但只有在 swarm 模式下使用 Docker 时才能创建服务。

要启用集群,请使用:docker swarm init
然后继续创建服务,如:
docker service create [service-name] [--options [values]...]

如果您想利用 docker-compose 来创建服务,请按照以下方法为 Postgres 数据库执行此操作:

version: "3.1"

services:
  psql:
    image: postgres
    secrets:
    - psql_user
    - psql_password
    environment:
      POSTGRES_USER_FILE: /run/secrets/psql_user
      POSTGRES_PSWD_FILE: /run/secrets/psql_pass

secrets:
  psql_user:
    file: ./psql_user.txt
  psql_password:
    file: ./psql_pass.txt

最后,继续并在存在 docker-compose.yaml 的同一目录中使用 docker-compose up,它将启动您的 psql 服务并 运行。

详细说明一下,docker-compose 本身并不是一个编排器。 docker-compose 是一种使用单个文件和单个命令同时启动或停止多个容器的机制。

此外,必须声明 docker-compose 是一个测试实用程序,并不意味着在生产中使用。对于生产用途,请查看 stack.