首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在容器中运行多个服务(引擎) | Run multiple services in a container (Engine)

容器的主要运行过程是ENTRYPOINT和/或CMDDockerfile.一般建议您使用每个容器一个服务来区分关注的区域。该服务可能分到多个进程%28,例如,Apacheweb服务器启动多个工作进程%29。有多个进程是可以的,但是为了从Docker中获得最大的好处,请避免一个容器负责整个应用程序的多个方面。您可以使用用户定义的网络和共享卷连接多个容器。

容器的主进程负责管理它启动的所有进程。在某些情况下,主进程设计不好,并且在容器存在时没有很好地处理“收割”%28停止%29子进程。如果您的流程属于此类别,则可以使用--init选项在运行容器时。大--init标志将一个微小的init进程插入容器中作为主进程,并在容器退出时处理所有进程的收获。以这种方式处理这样的过程比使用完全的init进程(例如sysvinit,,,upstart,或systemd来处理容器中的流程生命周期。

如果您需要在一个容器中运行多个服务,您可以通过几种不同的方式来完成这一任务。

  • 将所有命令放入包装脚本中,并提供测试和调试信息。将包装器脚本作为CMD这是一个很幼稚的例子。首先,包装器脚本: #%21/bin/bash#启动第一个进程。[医]第一[医]进程-D状态=$?如果$Status-N0;然后回显“未能启动我的[医]第一[医]进程:$state“退出$Statusfi#启动第二个进程。[医]第二[医]进程-D状态=$?如果$Status-N0;然后回显“未能启动我的[医]第二[医]Process:$Status“Exit$Statsfi#朴素检查每分钟运行一次检查,以查看是否有任何进程退出。#这说明了如果要在容器中运行多个服务,需要完成的部分工作。如果检测到任何一个进程已经退出,容器将退出并带有一个错误#。#否则它将永远循环,每60秒醒来一次/bin/true;[医]第一[医]过程grep-q-v grep过程[医]一[医]状态=$?PS辅助grep我[医]第二[医]过程grep-q-v grep过程[医]二[医]状态=$?#如果上面的grep找到了什么,如果它们都不是0,它们将退出0状态#,那么如果$Process[医]一[医]状态-n0-o$进程[医]二[医]现状---N0然后回显“其中一个进程已经退出”。出口-1fi睡眠60完成 接下来,Dockerfile: 来自ubuntu的最新版本[医]第一[医]处理我的[医]第一[医]进程复制我的[医]第二[医]处理我的[医]第二[医]进程复制我的[医]包装器[医]脚本嘘我[医]包装器[医]script.sh CMD./我[医]包装器[医]script.sh
  • 使用流程管理器,如supervisord这是一种中等重量的方法,需要你打包。supervisord以及它在图像%28中的配置,或者将您的图像建立在以下内容的基础上:supervisord%29,以及它将管理的不同应用程序。然后你开始supervisord,它为您管理您的流程。下面是一个使用这种方法的Dockerfile示例,它假定预先编写的supervisord.conf,,,my_first_process,和my_second_process所有文件都与您的Dockerfile位于同一个目录中。

来自ubuntu:最新运行APT-获取更新&APT-获取安装-y监控器运行mkdir-p/var/log/主管复制Superord.conf/etc/Superor/con.d/visorord.conf复制我的[医]第一[医]处理我的[医]第一[医]进程复制我的[医]第二[医]处理我的[医]第二[医]过程CMD“/usr/bin/Superord”

扫码关注腾讯云开发者

领取腾讯云代金券