如何在一個Docker中同時運行多個程序進程?


那么基本思路是在Dockerfile 的CMD 或者 ENTRYPOINT 運行一個”東西”,然后再讓這個”東西”運行多個其他進程 簡單說來是用Bash Shell腳本或者三方進程守護 (Monit,Skaware S6,Supervisor),其他沒講到的三方進程守護工具同理

Bash Shell腳本

入口文件運行一個Bash Shell 腳本, 然后在這個腳本內去拉起多個進程 注意最后要增加一個死循環不要讓這個腳本退出,否則拉起的進程也退出了 run.sh

#!/bin/bash
 
# start 1
start1  > /var/log/start1.log 2>&1 &
# start 2
start2 > /var/log/start2.log 2>&1 &
 
# just keep this script running
while [[ true ]]; do
    sleep 1
done

 

在Dockerfile的入口中運行run.sh

ENTRYPOINT  ["run.sh"]

 

用Bash Shell 的方式,任意發行版的linux都支持,缺點是不能拉起crash的進程,也就是只能拉起運行不能”守護” 如果不關心進程crash問題那么可以用這種方式

 

啟動腳本范例:

#!/bin/bash

# short for Host Home
HH="/home/work/s2"

# short for Container Home
CH="/home/work/app/s2"

#==============env start===============#

DOCKER_ENV=""

# 時區
DOCKER_ENV=" -e TZ=Asia/Shanghai $DOCKER_ENV "

# 中文支持
DOCKER_ENV=" -e LC_ALL=C.UTF-8 $DOCKER_ENV "

# gpu
DOCKER_ENV=" -e CUDA_VISIBLE_DEVICES=${cuda.visible.devices} $DOCKER_ENV "

# CAFFE_PREDICT_DEVICEID
DOCKER_ENV=" -e CAFFE_PREDICT_DEVICEID=0 $DOCKER_ENV "
#==============env end=================#


#==============volumes start===============#

DOCKER_VOLUMES=""

# 配置文件掛載
DOCKER_VOLUMES=" -v $HH/data/data:$CH/data/ $DOCKER_VOLUMES "
# 日志文件掛載
DOCKER_VOLUMES=" -v $HH/logs:$CH/log $DOCKER_VOLUMES "

#==============volumes end=================#

docker run --restart=always --runtime=nvidia -ti -d --security-opt seccomp:unconfined --cap-add SYS_PTRACE -p $${serverId}:8120 --name content-ocr-s2-${serverId} $DOCKER_ENV $DOCKER_VOLUMES $DOCKER_IMAGE

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM