使用Dockerfile创建镜像来部署一个基于Flask的深度学习项目

使用Dockerfile创建镜像来部署一个基于Flask的深度学习项目

  • 一. 准备工作
  • 二. Docker操作
  • 三. 可能遇到的问题

一. 准备工作

本例程主要介绍了使用Dockerfile创建镜像来部署一个基于Flask的深度学习项目,准备工作如下:

  1. 认识Docker
    使用Dockerfile创建镜像来部署一个基于Flask的深度学习项目_第1张图片
    Docker是一种容器技术,其口号就是“Build、Share and Run”,能够方便、快捷地部署应用项目。
  2. flask应用
    flask是一款轻量型的Web服务框架,功能齐全,应用广泛。
  3. YOLOv5
    YOLOv5是YOLO系列最新一版的目标识别框架,具有检测速度快、识别准确率高等特点。
  4. 运行环境
    (1)因Docker主要支持Linux系统,本例采用Ubuntu18.04系统。
    (2)需预先在系统上安装docker。
    (3) 安装Pycharm(专业版)。
    (4)注册一个hub.docker.com账户。

二. Docker操作

1. 项目代码
项目目录如下:
使用Dockerfile创建镜像来部署一个基于Flask的深度学习项目_第2张图片
特别说明:
run.py:本项目的主程序。
Dockerfile:无后缀,在工作目录。
app文件夹:将主要代码放到此处。
app/views.py:flask框架下的route函数均在此处。
app/yolo:YOLOv5的相关代码。
app/utils:项目通用代码。
2. 编写Dockerfile

# This dockerfile unses the python:3.8.0 image
# VERSION 1 - EDITION 1
# Author: imqtan

# Base image to use, this must be set as the first line
FROM python:3.8.0

# Maintainer:docker_user<docker_user@email.com>
MAINTAINER imqtan hardenqiu@foxmail.com

COPY . /aep-ai-seal-v1-yolov5

WORKDIR /aep-ai-seal-v1-yolov5

RUN apt-get update

RUN apt-get install -y libgl1-mesa-dev

RUN pip install --upgrade pip

RUN pip install torch==1.8.2+cpu torchvision==0.9.2+cpu torchaudio==0.8.2 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html

RUN pip install -r requirements.txt

EXPOSE 5000

ENTRYPOINT ["python"]

CMD ["run.py"]

特别指出:
FROM python:3.8.0:python 3.8.0作为基础镜像(或父镜像)。
COPY:其用法为COPY [src] [dest],此处src为”.“,本例即将工作目录下的全部代码拷贝到dest(镜像下的目录)。
WORKDIR:其用法为WORKDIR [dir],本例即将本地工作目录设置为dir的"/aep-ai-seal-v1-yolov5"。
RUN apt-get update:拉取下来的基础镜像需要更新一下。
RUN apt-get install -y xxxxx:安装项目所需的一些组件。
RUN pip install --upgrade pip:更新pip,以便后续顺利安装其他组件。
RUN pip install torch-xxxx:加载YOLOv5所需的组件pytorch。
RUN pip install -r requirements.txt:加载镜像所需的库。
EXPOSE 5000:抛出的端口。
ENTRYPOINT [“python”]:python环境来运行下面的程序。
CMD [“run.py”]:需要在镜像中运行的主程序。
3. Build Dockerfile文件
方法1-使用Pycharm来Build:
使用Dockerfile创建镜像来部署一个基于Flask的深度学习项目_第3张图片
1处:直接打开Dockerfile进行编辑。
2处:”Edit Configuration…”来设置Docker信息。
3处:查看现有Docker的镜像信息(若不显示,双击来connect)。
使用Dockerfile创建镜像来部署一个基于Flask的深度学习项目_第4张图片
点开2处后,设置镜像标签,如“aep-ai-seal:2.0”,然后“OK”,保存设置。
运行该Dockerfile文件,执行Build,直到出现编译成功,3处可查看编译成功的镜像。
方法2-使用终端来Build:
使用Dockerfile创建镜像来部署一个基于Flask的深度学习项目_第5张图片
打开一个终端,进入到工作目录下,输入“docker build -t aep-ai-seal:2.0 .",进行编译。需要注意,镜像名与tag可以根据需要命名,指令后的”.“不要遗漏,其表示默认Dockerfile,注意核对该文件的命名。构建完成后,也可以在Pycharm的”3处“查看镜像。
4. Push项目镜像到公共仓库
方法1-使用Pycharm来Push镜像:
使用Dockerfile创建镜像来部署一个基于Flask的深度学习项目_第6张图片
点击”1处“或”2处“,弹出”Push镜像“的对话框,填入相关信息,点击”OK“,开始Push镜像。
使用Dockerfile创建镜像来部署一个基于Flask的深度学习项目_第7张图片
方法2-使用终端来Push镜像:
指令:

docker push imqtan/aep-ai-seal:2.0

5. 测试镜像
打开终端,查看是否已有该镜像。
使用Dockerfile创建镜像来部署一个基于Flask的深度学习项目_第8张图片

图中可看到,已经存在该项目的镜像。“aep-ai-seal”与“imqtan/aep-ai-seal”具有相同的ID,其实是一个镜像。
然后,输入指令便可启动一个docker镜像。

# 启动该项目的镜像
docker run -p 5000:5000 aep-ai-seal:2.0

三. 可能遇到的问题

本例程仅仅给出了一个基于Flask的深度学习项目部署的大致流程,docker以及Dockerfile有着丰富的指令集,对于复杂的项目部署,需要进一步了解其他指令的使用。

  1. 网络不佳导致加载失败:请更换网络环境重新开始。
  2. docker的Push失败:请检查网络环境,请登录docker账号。
  3. “docker run -p 5000:5000 aep-ai-seal:2.0“报错:可能原因是主机5000的端口已被占用,请将指令改为“docker run aep-ai-seal:2.0“,即不指定端口映射。
  4. 安装超时:可能由DNS导致,将编译指令改为“docker build --network=host -t aep-ai-seal:2.0 .“。

你可能感兴趣的:(Web服务类AI开发,docker,python,flask,深度学习)