我有一个具有以下结构的python应用程序:
./DB
./lib
./docker-compose.yml
./Dockerfile
./module1.py
./module2.py
./module3.py
./app_run.sh
./requirements.txt
我想要得到的东西
- MySQL服务器在单独的容器上运行。
- 应用docker映像。
- 模块的脚本作为app_run.sh中的容器单独运行。
我的应用程序映像大约为1.5G,所以我想要实现的是拥有一个应用程序映像,该映像能够使用唯一的某个模块运行多个容器。这样我就可以使用module1.py脚本(或任何其他脚本)或许多此类脚本来运行容器。
我希望以这种方式加快处理速度,因为不需要每次都构建应用程序映像,而只需建立连接即可。
为什么我需要从应用程序外壳脚本运行此类容器。
Shell脚本从外部源获取所需的参数(例如URL和令牌),然后在模块中使用它们。
shell脚本具有以下结构:
#!/bin/sh
ip=$1
url=$2
token=$3
folder="./temp/"
folder_oss='./temp/DB/TEST/'
db_folder="./temp/DB"
app="./"
name=$(date '+%Y%m%d%H%M%S')
cd $folder && mkdir -p "$folder$name"
folder="$folder$name"
cd $app
if [ $ip = 1 ]; then
python3.6 ./module1.py -u $url -t $token -f $folder -d $db_folder
status=${PIPESTATUS};
elif [ $ip = 3 ]; then
python3.6 ./module2.py -u $url -t $token -f $folder |& tee "$folder/logtemp.txt"
status=${PIPESTATUS};
elif [ $ip = 7 ]; then
python3.6 ./module.py -u $url -t $token -f $folder -d $db_folder |& tee "$folder/load_logtemp.txt"
status=${PIPESTATUS};
else
echo "Error while predicting"
status=1;
fi
我想代替python3.6 ./module1.py我应该写一些类似docker container run的东西。但是我应该如何将那些模块指定为单独的容器?
当前,我的Dockerfile如下所示:
FROM python:3.6
COPY . /app
WORKDIR /app
RUN pip freeze > requirements.txt
EXPOSE 7524
CMD ["./app_run.sh","1","link/to/settings.json,"token"]
还有docker_compose.yml:
version: "2"
services:
app:
build: .
environment:
- DB_HOST=mysql
- DB_PORT=7524
ports:
- 8080:8080
depends_on:
- mysql
mysql:
image: mysql:latest
restart: always
environment:
- MYSQL_USER=user
- MYSQL_ROOT_PASSWORD=54321
ports:
- 7524:3303
volumes:
- my-db:/var/lib/mysql
volumes:
my-db: