• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Flask-2使用Dockerfile创建镜像来部署Flask的深度学习项目

武飞扬头像
WXG1011
帮助2

容器与镜像的区别

学新通

镜像,是一个静态概念,一个镜像由若干只读层(read-only layer)构成。

容器和镜像一样,也是若干层的叠加,唯一区别是所有只读层的最上面一层,是一层可读可写层,如上图绿色图例所示。

Docker 镜像都是只读的,当容器启动时,一个新的可写层加载到镜像的顶部!这一层就是我们通常说的容器层,容器之下的都叫镜像层!

容器 = 容器镜像 可读可写层

1、Dockerfile文件:

  1.  
    # 基于的基础镜像
  2.  
    FROM python:3.7
  3.  
    # 维护者信息
  4.  
    MAINTAINER *** ***@qq.com
  5.  
    # 复制代码到code文件夹
  6.  
    COPY . ../code
  7.  
    # 设置code文件夹是工作目录
  8.  
    WORKDIR /code
  9.  
    RUN apt-get update
  10.  
    RUN apt-get install -y libgl1-mesa-dev
  11.  
    RUN pip install --upgrade pip
  12.  
    RUN pip install torch==1.7.1 cu110 torchvision==0.8.2 cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
  13.  
    RUN pip install -r requirements.txt
  14.  
    # 申明镜像内服务监听的端口
  15.  
    EXPOSE 5000
  16.  
    CMD ["python","test.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:抛出的端口。
  • CMD [“python”,“run.py”]:python环境下运行镜像中主程序。

2、创建镜像:

打开一个终端,进入到工作目录下,输入以下命令进行编译。

  1.  
    # docker build -t 镜像名:tag名 .
  2.  
    docker build -t flask:1.0 .

需要注意,镜像名与tag可以根据需要命名,指令后的”.“不要遗漏,其表示默认Dockerfile。

3、测试镜像

docker images

4、启动镜像

docker run -p 本机映射端口:镜像映射端口 -d  --name 启动镜像名称 -e 设置环境变量   镜像名称:镜像版本号

  • 参数释义:
  •  -p   5000:5000表示端口映射,前面的端口是外部环境的端口,后面的端口表示镜像的端口,通过这句话将两个端口连接起来。访问外部环境的5000端口,就相当于访问镜像的5000端口
  •  -d   后台运行
  •  --name   容器名称
  •  -e    设置环境变量 
docker run -p 5000:5000 flask2.0:latest

5、docker读取NVIDIA显卡

创建nvidia-container-toolkit.sh脚本

  1.  
    $ cat nvidia-container-runtime-script.sh
  2.  
     
  3.  
    # Add the package repositories
  4.  
    distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
  5.  
    curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
  6.  
    curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
  7.  
    sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
  8.  
    sudo systemctl restart docker

执行脚本

sh nvidia-container-runtime-script.sh

运行利用GPU的Ubuntu容器

  1.  
    # --rm 代表运行之后则删除容器
  2.  
    docker run -p 5000:5000 --gpus all --rm flask2.0:latest

6、Docker容器进入的方式

  • 使用docker attach进入Docker容器
sudo docker run -itd flask:1.0 /bin/bash  

使用docker attach进入该容器

sudo docker attach
  • 使用docker exec进入Docker容器
  1.  
    zxh@zxh-Precision-3640-Tower:~$ sudo docker ps
  2.  
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3.  
    8a6742c70360 flask2.0:latest "python test.py" 17 minutes ago Up 17 minutes 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp gifted_mirzakhani
  4.  
    zxh@zxh-Precision-3640-Tower:~$ sudo docker exec -it 8a6742c70360 /bin/bash
  5.  
    root@8a6742c70360:/code# nvidia-smi

PS:使用方式一时,当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。因为这个原因,所以docker attach命令不太适合于生产环境。

6、将镜像打成tar包

docker image save flask2.0> flask.tar

7、导入打包好的镜像

  1.  
    cong@cong-desktop:~$sudo docker load -i flask.tar
  2.  
    open /var/lib/docker/tmp/docker-import-445297053/839f6fa1ac9daa8dc13a9b059857e5808443eda15bb1d63553a42a2ac79baf8a/json: no such file or directory
  3.  
    # 上述命名出现错误,可采用以下命令
  4.  
    cat flask.tar | sudo docker import - flask.tar

相关命令:

  1.  
    # 为库中镜像改名:
  2.  
    docker tag {imageID} {repository}:{tag}
  3.  
    # 停止所有容器
  4.  
    docker stop $(docker ps -aq)
  5.  
    # 删除所有容器
  6.  
    docker rm $(docker ps -aq)
  7.  
    # 通过命令可以从镜像仓库中拉取镜像
  8.  
    docker image pull <repository>:<tag>
  9.  
    # commit镜像:先进入基础镜像的容器里面,然后安装需要的包,最后执行如下命令:
  10.  
    docker commit <podid> <imagetag>
  11.  
    apt update

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgahece
系列文章
更多 icon
同类精品
更多 icon
继续加载