使用 systemd 还是 docker-compose 来替代 Upstart 以保持 Docker 容器在系统上运行

107次阅读
没有评论

问题描述

目前在多台机器上运行着一些 Docker 容器,如 sysdig、consul、fluentd、mesos-slave 等。他们正在迁移到 Ubuntu 18.04 LTS,考虑将现有的配置从 Upstart 转换为 Systemd 或 Docker Compose。用户需要判断哪种解决方案更合适,因为他们已经在使用 Marathon on Mesos,并且这些服务必须在每台主机上运行,并在 Marathon/Mesos 运行之前启动。

解决方案

请注意以下操作可能因版本差异而略有不同,请确保备份配置文件和系统状态。

方案1:使用 Systemd

如果你想要与 Upstart 最相似的解决方案,同时能够进行健康检查并在进程死掉后自动恢复,那么 Systemd 可能是一个很好的选择。以下是迁移到 Systemd 的步骤:

  1. 创建 Systemd 配置文件。
  2. 创建一个以 “.service” 结尾的文件,例如:myfluentd.service
  3. 在配置文件中设置启动参数、依赖关系和其他配置选项。你可以参考原来的 Upstart 配置来创建 Systemd 配置。

  4. 将 Systemd 配置文件放置到合适的位置。

  5. 通常,Systemd 配置文件存放在 /etc/systemd/system/ 目录下。

  6. 启用并启动 Systemd 服务。

  7. 使用 systemctl 命令来启用和启动服务。
  8. 例如:sudo systemctl enable myfluentd.servicesudo systemctl start myfluentd.service

  9. 确保 Systemd 服务自启动。

  10. 使用 systemctl 命令启用服务自启动。
  11. 例如:sudo systemctl enable myfluentd.service

方案2:使用 Docker Compose

如果你考虑将所有容器的配置整合到一个文件中,并且不希望在每个容器上执行健康检查和自动恢复,而是依赖外部的容器编排系统(Marathon/Mesos),那么 Docker Compose 可能是更适合的选择。以下是迁移到 Docker Compose 的步骤:

  1. 创建 Docker Compose 文件。
  2. 创建一个 docker-compose.yml 文件。
  3. 在文件中定义你的所有服务(容器)以及它们的配置。你可以参考原来的 Upstart 配置来设置容器参数。

  4. 启动 Docker Compose 服务。

  5. 使用 docker-compose 命令来启动服务。
  6. 例如:docker-compose up -d

  7. 可选:将 Docker Compose 服务添加到自启动。

  8. 如果你想要在系统启动时自动启动 Docker Compose 服务,可以将启动命令添加到系统的自启动脚本中。

注意事项

请记住,根据你的需求和场景,选择 Systemd 还是 Docker Compose 都有不同的优缺点。Systemd 更适合单台主机上运行的服务,而 Docker Compose 更适合在多容器环境中进行编排。考虑你的需要和现有的基础设施,选择最适合的方案。

总结

在迁移到 Ubuntu 18.04 LTS 时,你可以选择将现有的 Upstart 配置转换为 Systemd 或者使用 Docker Compose。根据你的需求,选择适合的解决方案,确保容器能够在系统上稳定运行。

正文完