容器的主要运行过程是ENtryPOINT和或CMD末尾DockeRfile。通常建议您通过每个容器使用一项服务来分离关注区域。该服务可以分叉到多个进程中。可以有多个进程,但是要从DockeR中获得最大收益,请避免一个容器负责整个应用程序的多个方面。您可以使用用户定义的网络和共享卷连接多个容器。
容器的主要过程负责管理它启动的所有过程。在某些情况下,主流程设计不当,并且在容器退出时无法优雅地处理“收获&Rdquo;(停止)子流程。如果您的进程属于此类别,则可以–inIT在运行容器时使用该选项。该–inIT标志将一个微小的inIT进程作为主要进程插入到容器中,并在容器退出时处理所有进程的收割。用这种方式处理此类过程优于使用成熟的初始化过程或systemd处理容器中的过程生命周期。
如果您需要在一个容器中运行多个服务,则可以通过几种不同的方式来完成此操作。
将所有命令放入包装器脚本中,其中包含测试和调试信息。以您的身份运行包装脚本CMD。这是一个非常幼稚的例子。首先,包装脚本:
接下来,DockeRfile:
FROM Ubuntu:latest
COPY My_fiRst_ProceSS My_fiRst_ProceSS
COPY My_second_ProceSS My_second_ProceSS
COPY My_wRappeR_scRIPt.sh My_wRappeR_scRIPt.sh
CMD ./My_wRappeR_scRIPt.sh
如果您有一个需要首先启动并保持运行的主要流程,但是您暂时需要运行其他一些流程,则可以使用bash的作业控制来简化这一过程。首先,包装脚本:
FROM Ubuntu:latest
COPY My_MAIn_ProceSS My_MAIn_ProceSS
COPY My_helpeR_ProceSS My_helpeR_ProceSS
COPY My_wRappeR_scRIPt.sh My_wRappeR_scRIPt.sh
CMD ./My_wRappeR_scRIPt.sh
使用类似的流程管理器supeRvisoRd。这是一种中等重量的方法,需要您将supeRvisoRd映像及其配置打包及其管理的不同应用程序一起打包。然后,您将启动supeRvisoRd,它会为您管理流程。下面是使用这种方法,它假定预先编写的一个例子DockeRfile supeRvisoRd.conf,My_fiRst_ProceSS和My_second_ProceSS文件都存在于相同的目录中DockeRfile。
FROM Ubuntu:latest
RUN apt-get update &aMp;&aMp; apt-get install -y supeRvisoR
RUN MkdiR -p /vaR/log/supeRvisoR
COPY supeRvisoRd.conf /etc/supeRvisoR/conf.d/supeRvisoRd.conf
COPY My_fiRst_ProceSS My_fiRst_ProceSS
COPY My_second_ProceSS My_second_ProceSS
CMD [“/USR/BIn/supeRvisoRd”]