【问题标题】:Should I use systemd or docker-compose to keep Docker containers running on my systems?我应该使用 systemd 还是 docker-compose 来保持 Docker 容器在我的系统上运行?
【发布时间】:2018-09-24 20:40:10
【问题描述】:

我们谈论的是 Docker 容器,如 sysdig、consul、fluentd、mesos-slave 等,我们几乎在所有机器上运行。

目前我们使用的是 Ubuntu 的 Upstart 和 CoreOS 的 Fleectl。我们正在迁移到 Ubuntu 18.04 LTS,目前正在考虑是否将配置转换为:

  • 系统化或
  • Docker-compose

Systemd 可以进行运行状况检查并自动恢复已停止运行的进程。它也与我们大量使用的 Upstart 最相似。我们的 Upstart 配置文件是从 cloud-config 生成的,如下所示:

- >
    /usr/local/bin/generate-docker-upstart fluentd registry/fluentd:1.0.1
    -e HOST=elasticsearch
    -e PORT=9200
    -e INDEX=fluentd
    -e NODE=`hostname -s`
    -e ROLE=app
    -e ENVIRONMENT={{Ref:Environment}}
    -e TENANT={{Ref:Tenant}}
    -p 24224:24224
    --name \$NAME \$IMAGE

我们使用 AWS CloudFormation 使虚拟机联机。

我们不能使用真正的容器编排框架(我们已经在使用 Marathon/Mesos),因为这些服务必须在每台主机上运行并且在 Marathon/Mesos 运行之前运行。

哪种解决方案最有意义?将这些文件转换为 systemd 或开始使用 docker-compose,尽管已经在 Mesos 上使用 Marathon?

【问题讨论】:

  • 工具推荐请求在这里明显偏离主题,根据stackoverflow.com/help/on-topic 的“一些问题仍然偏离主题”列表中的#4。这些方法中的任何一种都可以发挥作用。您应该使用哪一个取决于回答问题的人的个人意见。 (在 systemd 中包装 Docker 实例需要一些额外的工具,而不会因 docker 和 systemd 处理 cgroup 的方式之间的交互而产生不必要的副作用,但这些工具工作得很好)。

标签: docker docker-compose systemd


【解决方案1】:

重启策略是保持 Docker 容器运行的内置方法。

docker run --restart=always -d image_name

详情请参阅docs

【讨论】:

    【解决方案2】:

    免责声明:我不是一个systemd-savvy用户,所以我的回答相当于总结了docker-compose的一些特性并给出了一些指示。

    你说

    我们不能使用真正的容器编排框架 [...] 什么解决方案最有意义?将这些文件转换为 systemd 或开始使用 docker-compose,尽管已经在 Mesos 上使用 Marathon?

    但可以注意到docker-compose 本身就是一个容器编排工具(尽管比其他一些编排解决方案更轻量级)。

    Systemd 可以进行运行状况检查并自动恢复已停止运行的进程。它也与我们大量使用的 Upstart 最相似。我们的 Upstart 配置文件是从 cloud-config 生成的,如下所示:[…]

    您可能已经对docker-compose 有了一些见解,但为了完整起见,它可以被视为用 Python 实现的“Docker 前端”,它允许:

    1. 用 YAML 中的声明性配置替换复杂的 Docker 命令(例如docker builddocker run 等)。有关此表达规范的更多详细信息,请参阅the doc

    2. 管理多容器应用程序的整个生命周期(可能使用自定义网络、卷等)。特别是,可以告诉docker-compose 在出现错误时始终重新启动给定容器,并告诉specify health checks
      比如看下面两个指针:

    最后,请注意,使用docker swarm 可能是另一种替代解决方案,它至少与docker-compose 一样“标准”,并且还具有集群功能 - 将一组 Docker 引擎转换为单个虚拟 Docker引擎 (source)。

    两个相关的指针:

    【讨论】:

      猜你喜欢
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 2021-12-01
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多