互联网技术 / 互联网资讯 · 2023年12月17日

Docker核心技术解析:容器中同时运行多个服务

容器的主要运行过程是ENtryPOINT和或CMD末尾DockeRfile。通常建议您通过每个容器使用一项服务来分离关注区域。该服务可以分叉到多个进程中。可以有多个进程,但是要从DockeR中获得最大收益,请避免一个容器负责整个应用程序的多个方面。您可以使用用户定义的网络和共享卷连接多个容器。

容器的主要过程负责管理它启动的所有过程。在某些情况下,主流程设计不当,并且在容器退出时无法优雅地处理“收获&Rdquo;(停止)子流程。如果您的进程属于此类别,则可以–inIT在运行容器时使用该选项。该–inIT标志将一个微小的inIT进程作为主要进程插入到容器中,并在容器退出时处理所有进程的收割。用这种方式处理此类过程优于使用成熟的初始化过程或systemd处理容器中的过程生命周期。

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

将所有命令放入包装器脚本中,其中包含测试和调试信息。以您的身份运行包装脚本CMD。这是一个非常幼稚的例子。首先,包装脚本:

云计算核心技术Docker教程:Docker在容器中运行多个服务

接下来,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的作业控制来简化这一过程。首先,包装脚本:

云计算核心技术Docker教程:Docker在容器中运行多个服务

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”]

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.

登录免费注册