背景:
在docker容器中,如果乙個容器只執行乙個程序服務是蠻簡單的,通過dockerfile中cmd就可以實現,如果有引數也只需使用enterpoint,cmd作為引數傳入即可。
然而所有事物都不是一層不變的,由於業務的需要本將nodejs執行的任務改為用python執行,這樣意味著乙個python容器中需要hold住三個py任務程序(原先在執行的與後來業務需要的),並且這三個py檔案執行過程中都是前台執行,作為單個執行正好符合docker容器必須前台執行的標準。但是三個就需要換一種方式解決了
這邊大部分情況下,我們通過shell指令碼,呼叫並執行任務。
正文:
一、 在真實伺服器上py執行,shell呼叫
[root@docker-server ~]
# cat restart,sh
#!/bin/sh
# 案件匯出
kill -9 `
ps -ef|
grep export_case.py |
grep -v grep
|awk''`
nohup python3 -u export_case.py $
>>
../logs/export_case.log 2>
&1 &
# 還款和減免
kill -9 `
ps -ef|
grep repayment_reduction_export.py |
grep -v grep
|awk''`
nohup python3 -u repayment_reduction_export.py $
>>
../logs/repayment_reduction_export.log 2>
&1 &
# 催記
kill -9 `
ps -ef|
grep export_case_operation.py |
grep -v grep
|awk''`
nohup python3 -u export_case_operation.py $
>>
../logs/export_case_operation.log 2>
&1
#因為真實伺服器不涉及必須前台執行,可以將前台執行的程序用& 後台執行。
二、 在python容器中執行py指令碼
#首先看下未引入其他任務時的情況
[root@0eeec2741cbb py]
# ps -ef
uid pid ppid c stime tty time cmd
root 1 0 0 08:58 ? 00:00:07 python3 export_case.py
root 8 0 0 16:44 ? 00:00:00 bash
root 23 8 0 16:44 ? 00:00:00 ps
-ef
#附上dockerfile
[root@docker-server python]
# cat dockerfile
from basecentos:1 #這裡定義一些業務所需要的配置程式等
#這一步以上可以自動安裝python環境,去掉&& \即可
workdir /root/python/py
#copy export_case.py export_case_operation.py repayment_reduction_export.py restart.sh /root/python/py/
#entrypoint python3 export_case.py #可加可不加,加上去規範點
#這是單程序業務作業時候
#entrypoint bash restart.sh
#這是後來新增新業務後寫法
#這邊只進行映象的編譯過程
#我這邊是通過jenkins自動構建映象
[root@docker-server script]
# cat python.sh
#!/bin/bash
id=$1
cat >> dockerfile << eof
from basepython:2
copy export_case.py export_case_operation.py repayment_reduction_export.py restart.sh /root/python/py/
#只是開始時候新增,後期通過對映關係,修改檔案重啟下容器即可,無需重新製作映象
workdir /root/python/py/
entrypoint bash restart.sh
eofif
[-d /usr/local/docker_registry/docker/registry/v2/repositories/python/_manifests/tags/
$id]
then
rm-rf /usr/local/docker_registry/docker/registry/v2/repositories/python/_manifests/tags/
$id docker rmi 127.0.0.1:5000/python:$id
fidocker build --no-cache -t 127.0.0.1:5000/python:$id
.docker push 127.0.0.1:5000/python:$id
rm-rf dockerfile
#如果用最先的restart.sh指令碼則會出現如下情況,只啟動了乙個程序
結論:
#最後經過摸索研究,一方面py檔案中如果匯入為匯入的模組則無報錯無法通過docker logs檢視,需要先導入模組,第二個就是啟動任務程序的shell指令碼不應該這樣寫。正確如下:
#!/bin/sh
# 案件匯出
# 還款和減免
# 催記
python3 export_case.py >> .
./logs/export_case.log 2>&1 & python3 repayment_reduction_export.py >> .
./logs/repayment_reduction_export.log 2>&1 & python3 export_case_operation.py >> .
./logs/export_case_operation.log 2>&1 && tail -f /dev/null
#這樣再去執行就ok了,用&連線,最後用tail卡在前台 乙個容器多個程序,乙個pod多個容器
乙個容器多個程序 在docker的映象編譯指令碼dockerfile中帶起多個程序,如下可以在contivnet.sh中啟動多個程序 from 192.168.1.2 5001 world centos7 ovs 2.6.4 1 copy bin contiv bin copy scripts co...
乙個Tomcat執行多個例項
本文介紹在同乙個tomcat下執行mydomain.com和mysite.com這兩個例項的步驟。有時候,我們希望週期性的更新tomcat 有時候,我們又想統一管理安裝在一台機器上的tomcat 比如讓tomcat版本統一,讓多個例項的tomcat的依賴統 一 配置統一等 在這些場景下,我們都不希望...
乙個程序控制多個socket
module test tcp compile export all include lib kernel include inet.hrl define tcp options,binary,test pid spawn link module,loop,gen tcp listen 6099,t...