在没有提供基本系统服务的情况下在docker中运行单个进程是错误的吗?

Cod*_*bie 7 docker

在阅读了phusion/baseimage介绍后,我觉得从Ubuntu映像或任何其他官方发行版映像创建容器并在容器内运行单个应用程序进程是错误的.

主要原因简短:

  • 没有正确的init进程(处理僵尸和孤立进程)
  • 没有syslog服务

基于这一事实,Docker hub上可用的大多数官方docker镜像似乎都做错了.作为一个例子,MySQL的图像运行mysqld作为唯一的过程中并没有提供比书面信息以外的任何记录设施mysqld,以STDOUTSTDERR,通过访问docker logs.

现在出现的问题是在docker容器内运行服务的适当方法. 在docker容器中只运行一个应用程序进程而不提供像syslog这样的基本Linux系统服务是错误的吗? 它取决于容器内运行的服务类型吗?

Usm*_*ail 7

请查看此讨论以获得有关此问题的详细信息.基本上Solomon Hykes和docker的官方派对是Docker容器应该尽可能接近单个进程的微服务器.单个"真实"服务器上可能有许多这样的服务器.如果进程失败,您应该只启动一个新的docker容器,而不是尝试在容器内设置初始化等.因此,如果您正在寻找规范的最佳实践,答案是没有基本的Linux服务.当您考虑在单个节点上运行的许多docker容器时,您是否真的希望它们都运行这些服务的自己版本?

话虽这么说,在泊坞窗服务的日志记录的状态是著名的坏.即便是码头工人的创始人所罗门希克斯承认其正在进行的工作.此外,您通常需要为实际部署提供更多灵活性.我通常使用卷将我的日志挂载到主机系统,并在主机虚拟机中运行日志旋转守护程序等.同样地,我要么安装的sshd或离开交互的shell在容器打开,所以我可以发出轻微的命令,而无需重新推出,至少要等到我真的相信我的容器是气密,将不需要更多的调试.

编辑:使用docker 1.3和exec命令,不再需要"保持交互式shell打开".


rex*_*das 1

这取决于您正在运行的服务类型。

Docker 允许您“在任何地方构建、发布和运行任何应用程序”(从网站)。这告诉我,如果一个“应用程序”由/需要多个服务/进程,那么它们应该在单个 Docker 容器中运行。对于用户来说,仅仅为了运行一个应用程序就必须下载并运行多个 Docker 镜像,这将是一件痛苦的事情。

附带说明一下,将应用程序分解为多个映像会受到配置漂移的影响。

我明白为什么你想将 docker 容器限制为一个进程。原因之一是正常运行时间。创建 Docker 配置系统时,必须将容器的正常运行时间保持在最低限度,以便快速横向扩展。这意味着,如果我可以在每个 Docker 容器中运行一个进程,那么我就应该这么做。但这并不总是可能的。

直接回答你的问题。不,在docker中运行单个进程并没有错。

华泰