docker容器内要启动两个进程时Dockerfile的实现代码

docker容器内要启动两个进程时Dockerfile的实现代码,第1张

docker容器内要启动两个进程时Dockerfile的实现代码

详细介绍了Docker容器需要启动两个进程时dockerfile的完成编码,具有非常好的实用价值,希望对大家有所帮助。跟我回去看看。

最近想做cron调度任务的Docker,在Dockerfile中做如下定义。

FROMlibrary/alpine:latest RUNapk--updateaddrsyncopensshbash VOLUME["/data"] ADDstart.sh/ CMD["/bin/bash","/start.sh"]

选择crontab加载start.sh中的定时任务run.cron,然后启动crond:

/usr/bin/crontab/run.cron

/usr/sbin/crond

在docker构建Dockerfile之后,DockerRun-NameXXX-D用于运行容器。start.sh实现后,容器退出,没有办法启动预定任务。网上有各种方法,比如用nohup,无限循环,怎么用数据信号,都不靠谱。

在分析了docker的系统之后,docker容器只有一个管理方法的进程。该进程退出后,容器也将退出。这并不意味着一个容器中只运行一个其他的进程(代价太大),只有最后一个运行的进程不能退出。

该实例在容器中启动并运行start.sh。crond的默认设置是后台管理运行,这会导致容器在start.sh运行后退出。

所以在start.sh中,crond要强制选择前台接待 *** 作:crond-ff。

然后start.sh不容易退出,dockerrun-d运行时可以维护容器的后台管理。

start.shsummarysummary:

(1)当容器中运行多个守护进程时,前台进程应该通过后台管理方法(或add&)运行,否则后面的服务项目无法启动。

(2)容器中的最后一个守护进程必须由前台的接收方法运行,否则start.sh会退出,容器会退出,所有服务项目都会白白启动。

FROMubuntu:latest RUNmkdir-p"/usr/src/pdas"\ mkdir-p"/usr/src/pdas/reload" COPYbin.tar/usr/src/pdas COPYconfig.tar/usr/src/pdas COPYlib.tar/usr/src/pdas WORKDIR/usr/src/pdas RUNtar-xvflib.tar&&\ tar-xvfbin.tar&&\ tar-xvfconfig.tar ENVLD_LIBRARY_PATH/usr/src/pdas/lib/libxml/lib:/usr/src/pdas/lib/curl/lib:$LD_LIBRARY_PATH WORKDIR/usr/src/pdas/bin RUNchmodxstart.sh&&\ chmodxf_recv&&\ chmodxf_send VOLUME/behb/diqu VOLUME/var/log/pdas ENTRYPOINT./start.sh

在哪里?/start.sh脚本如下

#!/bin/bash ./f_recv& ./f_send

以上是docker镜像系统启动脚本制作的一点经验。

填写专长:解决方案当Docker中有几个进程在运行时

通常,Docker容器适合运行单个进程,但是在许多情况下,您必须在Docker容器中运行多个进程。此时,有两种不同的方式来运行多进程容器:shell脚本或supervisor。两者都很简单,有好有坏,只有一些重点需要特别注意。这里只说脚本做的解决方案。

写一个脚本,使multiple_thread.sh运行两个python程序流,并将运行结果保存在日志文件中。剧本制作内容如下

#!/bin/bash #Startthefirstprocess nohuppython-u/tmp/thread1.py>/tmp/thread1.log2>&1& psaux|grepthread1|grep-q-vgrep PROCESS_1_STATUS=$? echo"thread1status..." echo$PROCESS_1_STATUS if[$PROCESS_1_STATUS-ne0];then echo"Failedtostartmy_first_process:$PROCESS_2_STATUS" exit$PROCESS_1_STATUS fi sleep5 #Startthesecondprocess nohuppython-u/tmp/thread2.py>/tmp/thread2.log2>&1& psaux|grepthread2|grep-q-vgrep PROCESS_2_STATUS=$? echo"thread2status..." echo$PROCESS_2_STATUS if[$PROCESS_2_STATUS-ne0];then echo"Failedtostartmy_second_process:$PROCESS_2_STATUS" exit$PROCESS_2_STATUS fi #每过60秒查验进程是不是运行 whilesleep60;do psaux|grepthread1|grep-q-vgrep PROCESS_1_STATUS=$? psaux|grepthread2|grep-q-vgrep PROCESS_2_STATUS=$? #Ifthegrepsabovefindanything,theyexitwith0status #Iftheyarenotboth0,thensomethingiswrong if[$PROCESS_1_STATUS-ne0-o$PROCESS_2_STATUS-ne0];then echo"Oneoftheprocesseshasalreadyexited." exit1 fi

下一步是制作Dockerfile:

FROMcentos:latest COPYthread1.py/tmp/thread1.py COPYthread2.py/tmp/thread2.py COPYmultiple_thread.sh/tmp/multiple_thread.sh CMDbash/tmp/multiple_thread.sh

当上述docker容器需要启动两个进程时,Dockerfile的完成代码就是我分享给大家的全部。期待给你一个参考,也期待你的申请。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zz/774088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存