.. _introduce_docker_init: ============================= Docker多进程容器init进程简介 ============================= 在容器技术领域,有一个咒语 ``每个容器一个进程`` ,也就是说你不应该将容器视为传统的 ``大而全的虚拟机`` ,而是轻量级专用容器。 然而,事实上,在一个容器中确实运行了多个进程,例如 ``ENTRYPOINT`` 就是一个不折不扣的 ``init process`` 。有时我们需要在容器中运行多个相互依赖的进程(例如 :ref:`sidecar` ) 或者将历史应用程序迁移到容器环境中,此时我们需要一个传统的进程管理器以便在容器中运行多个进程。 不同的进程管理器 ================= - :ref:`systemd` - 大而全的系统进程管理器,功能复杂且强大,对于Docker容器环境 :ref:`docker_systemd` 是比较重的解决方案,但是符合传统运维管理模式 **我的实践虽然成功但是依然不推荐,配置太繁琐易错** - :ref:`openrc` - 在 :ref:`gentoo_image` 实践时意外发现这个轻量级进程管理器在Docker容器中"开箱即用",而且也是 :ref:`gentoo_linux` 和 :ref:`alpine_linux` 默认进程管理器,得到社区持续开发和维护,所以 **推荐采用** - :ref:`supervisord` - 易于使用的进程管理器 - `monit `_ 小型的进程管理器 - `runit `_ - `s6 `_ 非常著名的进程管理器,在 `s6-overlay `_ 项目提供了精彩的文档,并被很多用户推崇。我将在 :ref:`docker_s6` 中实践。 - :ref:`docker_tini` 是Docker默认进程管理器 参考 ===== - `Choosing an init process for multi-process containers `_