关于打包python项目为docker镜像的总结
最近在打比赛,主办方要求将模型和环境使用docker打包并上传云端。笔者以前并没有docker打包的经验,比赛组委会给的文档并不是很详细,在经过网上查资料以及自己摸索后,终于成功将自己的项目使用docker打包并推送到阿里云的镜像仓库中。因此写一篇总结记录一下。
docker打包python项目并推送到云端
前言
最近在打比赛,主办方要求将模型和环境使用docker打包并上传云端。笔者以前并没有docker打包的经验,比赛组委会给的文档并不是很详细,在经过网上查资料以及自己摸索后,终于成功将自己的项目使用docker打包并推送到阿里云的镜像仓库中。因此写一篇总结记录一下。
配置Docker
该部分为docker配置,若已成功配置docker,可跳过此部分
笔者使用的系统:ubuntu18.04
- 更新软件包列表
sudo apt update
- 安装依赖库
sudo apt install apt-transport-https ca-certificates curl software-properties-common
- 添加 Docker 的 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 添加 Docker 的 APT 软件库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- 再次更新软件包列表
sudo apt update
- 安装 Docker 软件包
sudo apt install docker-ce
- 启动 Docker 服务,并设置 Docker 服务开机自启
sudo systemctl start docker
sudo systemctl enable docker
至此,docker环境配置完毕!
制作docker镜像
该部分是将python项目打包为docker镜像,用于后续推送。笔者打包的项目是yolov7目标检测项目文件。大家可以参考该部分打包自己的项目文件。
1、镜像文件夹制作
首先,我们需要将需要打包的项目文件和一个名为“Dockerfile”的文件放置在一个文件夹中,我将它称为镜像文件夹。
文件夹结构如下图所示:
跑过深度学习模型的都知道requirement.txt,是模型所需的第三方库的下载文件。这里就不赘述了。
重点说说Dockerfile。
我查到的资料大概是说,在进行docker镜像制作时,会依次运行Dockerfile中的命令,相当于脚本。下面是笔者Dockerfile的内容:
FROM python:3.7.0
指定基础镜像。我们最后打包的镜像是基于这个基础镜像来生成的。大家也可以指定自己项目需要的python版本。
WORKDIR ./docker_example
指定镜像工作路径。意思就是将docker_example作为根目录,后面的CMD部分"./yolov7-main/detect.py"的"./"就是这个目录。
ADD . .
将源路径的内容添加到目标路径,ADD [原路径] [目标路径],这里"."表示当前目录。注意两点之间有空格,点和add也有空格。
RUN pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
更新pip,因为笔者后面安装python库的时候要求更新,所以笔者加上了。
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
安装python库。txt文件在大家的项目里一般有附带,若没有,也可以按照RUN <下载命令>依次下载。
CMD ["python", "./yolov7-main/detect.py"]
执行的命令。相当于在命令行执行 “python ./yolov7-main/detect.py”此处需要写你自己需要的内容,当然也可不加。
2、生成docker镜像
接下来我们要把我们刚刚创建的文件夹打包成镜像
首先需要进入镜像文件夹
执行下列命令
sudo docker build -t demo .
demo是创建的镜像的名称,"."不能少哦!表示当前目录。
运行这条命令后会执行Dockerfile中的命令,如下图所示:
后面还有内容,但是截不下了。
这一步需要一些时间,相当于配置了一个python环境。
保存镜像
sudo docker save -o output-filename demo
output-filename可以自定义你想要的文件名,这个文件会保存在我们之前创建的文件夹中。demo是镜像的名称,需要和前面创建镜像对应。
这里如果不用管理员权限的话可能会报错,如果在执行这条命令时使用了管理员权限还是报错,可以试试下面这条命令:
sudo chmod 777 ~/.docker/config.json
保存完镜像之后我们制作镜像的工作就完成啦!
将进行推送到云端
在制作完镜像之后,我们就可以将镜像推送到云端,供他人使用或者作为一个版本保存。这里笔者使用的是阿里云的镜像容器,其他的笔者没有试过,不过操作流程应该都差不多。在创建和推送镜像之前,笔者已经在阿里云创建了一个镜像仓库,所以这部分省略。
首先我们需要在我们电脑上登录docker
sudo docker login --username=aliyun******** registry.cn-hangzhou.aliyuncs.com
*号代表的是阿里云账号中包含的数字内容。此处建议使用管理员权限,否则会产生警告。
然后我们为之前创建的镜像打tag
sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/conputer_desigh/conputer_desigh_1:[镜像版本号]
[ImageId] 表示镜像ID,可以通过以下命令查看:
sudo docker images
当然,sudo可省略。后面的conputer_desigh是创建的实例和镜像仓库名称 (尴尬,在创建仓库的时候吧computer打错了)。
现在我们可以将打完tag的镜像推送到云端了:
sudo docker push registry.cn-hangzhou.aliyuncs.com/conputer_desigh/conputer_desigh_1:[镜像版本号]
desigh是创建的实例和镜像仓库名称 (尴尬,在创建仓库的时候吧computer打错了)。
现在我们可以将打完tag的镜像推送到云端了:
sudo docker push registry.cn-hangzhou.aliyuncs.com/conputer_desigh/conputer_desigh_1:[镜像版本号]
更多推荐
所有评论(0)