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:[镜像版本号]
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐