欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

docker容器內(nèi)要啟動兩個進(jìn)程時Dockerfile的實(shí)現(xiàn)代碼

 更新時間:2020年11月25日 15:09:02   作者:behb-zzw  
這篇文章主要介紹了docker容器內(nèi)要啟動兩個進(jìn)程時Dockerfile的實(shí)現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

近期想做一個cron定時任務(wù)的docker,在Dockerfile中做如下定義

FROM library/alpine:latest
RUN apk --update add rsync openssh bash
VOLUME ["/data"]
ADD start.sh /
CMD ["/bin/bash","/start.sh"]

在start.sh中用crontab 加載定時任務(wù)run.cron,然后啟動crond:

/usr/bin/crontab /run.cron

/usr/sbin/crond

docker build Dockerfile后,采用docker run –name xxx -d 運(yùn)行容器,發(fā)現(xiàn)start.sh執(zhí)行后容器就退出了,根本無法啟動定時任務(wù),網(wǎng)上各種辦法有說用nohup,有死循環(huán),還有說用信號,發(fā)現(xiàn)都不靠譜。

分析了一下docker的機(jī)制,一個docker容器同時只能管理一個進(jìn)程,這個進(jìn)程退出后,容器也就退出了。這并不意味著一個容器里只能同時運(yùn)行一個進(jìn)程(那樣太浪費(fèi)了),只是最后一個運(yùn)行的進(jìn)程不能退出。

這個案例在容器啟動運(yùn)行start.sh,crond的缺省設(shè)置是后臺運(yùn)行,這樣導(dǎo)致start.sh運(yùn)行結(jié)束,容器跟著start.sh退出而退出。

因此,在start.sh中,crond 應(yīng)強(qiáng)制采用前臺運(yùn)行:crond -f。

這樣start.sh就不會退出, docker run -d 運(yùn)行時就可以保持容器后臺運(yùn)行。

start.sh總結(jié)總結(jié):

(1)容器中運(yùn)行多個守護(hù)進(jìn)程時,前面的進(jìn)程要用后臺方式運(yùn)行(或添加 &),否則后面的服務(wù)無法啟動

(2)容器中最后一個守護(hù)進(jìn)程一定要用前臺方式運(yùn)行,否則start.sh退出,容器退出,所有的服務(wù)就白啟動了

FROM ubuntu:latest

RUN mkdir -p "/usr/src/pdas" \
  mkdir -p "/usr/src/pdas/reload"

COPY bin.tar /usr/src/pdas
COPY config.tar /usr/src/pdas
COPY lib.tar /usr/src/pdas

WORKDIR /usr/src/pdas
RUN tar -xvf lib.tar && \
  tar -xvf bin.tar && \
  tar -xvf config.tar

ENV LD_LIBRARY_PATH /usr/src/pdas/lib/libxml/lib:/usr/src/pdas/lib/curl/lib:$LD_LIBRARY_PATH

WORKDIR /usr/src/pdas/bin
RUN chmod +x start.sh && \
  chmod +x f_recv && \
  chmod +x f_send

VOLUME /behb/diqu
VOLUME /var/log/pdas

ENTRYPOINT ./start.sh

其中 ./start.sh腳本如下

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

以上是docker鏡像啟動腳本的一點(diǎn)心得。

補(bǔ)充知識:Docker中運(yùn)行多個進(jìn)程時的處理

通常,Docker容器適合運(yùn)行單個進(jìn)程,但是很多時候我們需要在Docker容器中運(yùn)行多個進(jìn)程。這時有兩種不同方法來運(yùn)行多進(jìn)程容器:使用shell腳本或者supervisor,兩種方法都很簡單,各有優(yōu)劣,只是有一些值得注意的細(xì)節(jié)。這里只講用腳本的處理方法。

寫一個腳本multiple_thread.sh,腳本功能運(yùn)行兩個python程序,將運(yùn)行結(jié)果保存到log文件中。腳本內(nèi)容如下

#!/bin/bash
# Start the first process
nohup python -u /tmp/thread1.py > /tmp/thread1.log 2>&1 &
ps aux |grep thread1 |grep -q -v grep
PROCESS_1_STATUS=$?
echo "thread1 status..."
echo $PROCESS_1_STATUS
if [ $PROCESS_1_STATUS -ne 0 ]; then
echo "Failed to start my_first_process: $PROCESS_2_STATUS"
exit $PROCESS_1_STATUS
fi
sleep 5
# Start the second process
nohup python -u /tmp/thread2.py > /tmp/thread2.log 2>&1 &
ps aux |grep thread2 |grep -q -v grep
PROCESS_2_STATUS=$?
echo "thread2 status..."
echo $PROCESS_2_STATUS
if [ $PROCESS_2_STATUS -ne 0 ]; then
echo "Failed to start my_second_process: $PROCESS_2_STATUS"
exit $PROCESS_2_STATUS
fi
# 每隔60秒檢查進(jìn)程是否運(yùn)行
while sleep 60; do
ps aux |grep thread1 |grep -q -v grep
PROCESS_1_STATUS=$?
ps aux |grep thread2 |grep -q -v grep
PROCESS_2_STATUS=$?
# If the greps above find anything, they exit with 0 status
# If they are not both 0, then something is wrong
if [ $PROCESS_1_STATUS -ne 0 -o $PROCESS_2_STATUS -ne 0 ]; then
echo "One of the processes has already exited."
exit 1
fi

下一步制作Dockerfile:

FROM centos:latest
 
COPY thread1.py /tmp/thread1.py
COPY thread2.py /tmp/thread2.py
COPY multiple_thread.sh /tmp/multiple_thread.sh
 
CMD bash /tmp/multiple_thread.sh

以上這篇docker容器內(nèi)要啟動兩個進(jìn)程時Dockerfile的實(shí)現(xiàn)代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決Mac Docker x509證書的問題

    解決Mac Docker x509證書的問題

    這篇文章主要介紹了解決Mac Docker x509證書的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Docker使用阿里加速器安裝centos教程

    Docker使用阿里加速器安裝centos教程

    這篇文章主要介紹了Docker使用阿里加速器安裝centos教程,需要的朋友可以參考下
    2017-04-04
  • 使用Docker快速部署Gitlab的方法

    使用Docker快速部署Gitlab的方法

    這篇文章主要介紹了使用Docker快速部署Gitlab的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • dockerfile-maven-plugin使用指南小結(jié)

    dockerfile-maven-plugin使用指南小結(jié)

    最近在將應(yīng)用部署到容器平臺,需要在打包時生成docker鏡像,在網(wǎng)上首先搜到了docker-maven-plugin這個插件,本文就來介紹了dockerfile-maven-plugin使用小結(jié),感興趣的可以了解一下
    2021-09-09
  • 關(guān)于Docker容器Dead狀態(tài)的分析

    關(guān)于Docker容器Dead狀態(tài)的分析

    這篇文章主要介紹了關(guān)于Docker容器Dead狀態(tài)的分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 如何將Docker的構(gòu)建時間減少40%(推薦)

    如何將Docker的構(gòu)建時間減少40%(推薦)

    這篇文章主要介紹了如何將Docker的構(gòu)建時間減少40%,本文描述了我們在優(yōu)化CI管道后獲得的一些新見解,需要的朋友可以參考下
    2023-11-11
  • Docker之自定義網(wǎng)絡(luò)實(shí)現(xiàn)

    Docker之自定義網(wǎng)絡(luò)實(shí)現(xiàn)

    大家好,本篇文章主要講的是Docker之自定義網(wǎng)絡(luò)實(shí)現(xiàn),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 如何恢復(fù)docker容器數(shù)據(jù)

    如何恢復(fù)docker容器數(shù)據(jù)

    項(xiàng)目測試環(huán)境數(shù)據(jù)庫數(shù)據(jù)丟失, 我們可以利用數(shù)據(jù)卷可以進(jìn)行恢復(fù)數(shù)據(jù),下面我來記錄一下,希望此文章對各位有所幫助
    2021-05-05
  • docker各目錄含義詳細(xì)解析

    docker各目錄含義詳細(xì)解析

    Docker容器的目錄結(jié)構(gòu)通常是在構(gòu)建鏡像時定義的,它基于所使用的基礎(chǔ)鏡像,下面這篇文章主要給大家介紹了關(guān)于docker各目錄含義詳細(xì)解析的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • CentOS7 阿里云的yum源使用詳解

    CentOS7 阿里云的yum源使用詳解

    這篇文章主要介紹了CentOS7 阿里云的yum源使用詳解的相關(guān)資料,這里對備份yum源,添加EPEL源,和緩存清理,進(jìn)行了介紹,需要的朋友可以參考下
    2016-11-11

最新評論