算法镜像封装教程:以实际项目为例
本项目以Docker镜像部署环境为主,python版本为python3.9.13,Docker版本大于20.0,测试系统和业务系统均为Linux。具体过程如下介绍:
本地服务器端,以python基础镜像为项目环境,进行项目搭建:(注意:docker容器内部需要数据和映射和端口映射,其次接口ip必须为"0.0.0.0",非固定IP)
项目文件结构如下图:
- 利用Docker获取基础镜像,搭建本地项目测试环境,并进行端口,数据更新文件和日志文件地址的映射(docker相关基础,请自行查询):
docker pull docker.m.daocloud.io/python:3.9.13 # 拉取基础镜像 #启动基础镜像,进行端口,文件地址在宿主机和容器上的映射,注意相关参数:--name 后面的名称自定义 docker run -it -d --privileged=true --name qh_project
-p 6252:6252
-v /home/yiled_data/historydata:/home/yiled/hitstory_year_weather_data
-v /home/yiled_data/logs:/home/yiled/logs
docker.m.daocloud.io/python:3.9.13 bash # 进入容器 docker exec -it 容器ID bash
# 容器内部资源更新,安装所需命令
apt-get update apt-get install -y vim
# 查看处于运行状态的容器,可以定位上面镜像启动是否成功,
docker ps -a 是查看所有状态的容器
docker ps #将容器外面的项目文件拷贝到容器里面相关路径下,:号前面为宿主机地址,后面为容器地址,上面映射的也是一样的
docker cp /home/yiled/ qh_project:/home/
#docker cp /path/to/project my_python_container:/app
# 切换到项目文件下进行python环境的搭建
cd home/yiled pip install -r requirements_39.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host https://mirrors.aliyun.com python app.py #测试环境不需要后台运行 ,业务环节需要后台运行,加入&符号 python app.py & #运行成功将基于该镜像的该容器重新提交,打包镜像。
#下面将容器提交成镜像,容器id可以用docker ps 查看,然后镜像名称和标签可以自己定义
docker commit 容器ID(57096c0b78c2) 镜像名称:标签
#导出、保存镜像,注意:demo.tar自定义,demo:v1是上面自定义的镜像名称和标签,会导出到当前所在的目录
docker save -o demo.tar demo:v1
- 生产环境服务器端:业务环境过程和测试环境基本相似,具体如下
# 上传上面save的demo.tar文件,为镜像文件。
docker load -i demo.tar # 查看上传的镜像是否成功
docker images # 进行宿主机和容器上的相关文件地址的映射,:号前面为宿主机,后面为容器
docker run -it -d --privileged=true --name qh_project
-p 6252:6252
-v /data/yileddata/historydata:/home/yiled/hitstory_year_weather_data
-v /data/yileddata/logs:/home/yiled/logs qh_yiled:py3913 bash
#查看镜像的容器是否启动成功 docker ps # 如果容器启动成功,进入容器,进入容器后的一切就是linux正常操作
docker exec -it [容器ID] bash
# 切换路径至项目文件下
cd /home/yiled # 运行python执行文件,&代表后台运行,可以用ps -ef 查看运行进程
python app.py &
- 自动化运行:(该项目中不用)
实现每天定时运行镜像中的 app.py,你可以使用 cron 来定时执行一个脚本。以下是具体步骤:
创建一个自动运行setup_cron.sh脚本文件,内容如下:
#!/bin/bash
# cat命令内部创建run_app.sh启动脚本
cat << 'EOF' > run_app.sh
#!/bin/bash docker run --rm your_image_name python /path/to/app.py
EOF
# 赋予脚本执行权限
chmod +x run_app.sh
# 配置 cron 定时任务
(crontab -l 2>/dev/null; echo "0 0 * * * /path/to/run_app.sh") | crontab -
将上述内容保存为一个 .sh 文件,例如 setup_cron.sh,然后执行该脚本,在终端命令框中输入:
chmod +x setup_cron.sh
#赋予 setup_cron.sh 脚本执行权限
./setup_cron.sh
#执行 setup_cron.sh 脚本,从而创建 run_app.sh 脚本并配置 cron 定时任务。
几点说明:
--rm 是 Docker 运行容器时的一个选项,
表示在容器退出后自动删除该容器。
这样可以确保每次运行容器时都是干净的,
不会留下之前运行过的容器实例。
这对于临时运行一次性的任务非常有用,可以避免容器堆积。
所以,docker run --rm your_image_name python /path/to/app.py 的意思是: 使用your_image_name 镜像运行一个容器。在容器内执行python /path/to/app.py 命令。
当命令执行完毕后,自动删除该容器。
0 0 * * * /path/to/run_app.sh如果是每天下午3点10分开始运行,需要修改 cron 表达式。具体来说,cron 表达式的格式是 分 时 日 月 周,所以需要将时间部分改为 10 15 * * *。 cron 定时任务应该设置为: 10 15 * * * /path/to/run_app.sh
要将定时任务设置为每天上午3点10分开始运行,你需要修改 cron 表达式。
具体来说,cron 表达式的格式是 分 时 日 月 周,所以你需要将时间部分改为 10 3 * * *。 因此,
cron 定时任务应该设置为: 10 3 * * * /path/to/run_app.sh 表示每天上午3点10分运行 run_app.sh 脚本。