Flask-2使用Dockerfile创建镜像来部署Flask的深度学习项目
容器与镜像的区别
镜像,是一个静态概念,一个镜像由若干只读层(read-only layer)构成。
容器和镜像一样,也是若干层的叠加,唯一区别是所有只读层的最上面一层,是一层可读可写层,如上图绿色图例所示。
Docker 镜像都是只读的,当容器启动时,一个新的可写层加载到镜像的顶部!这一层就是我们通常说的容器层,容器之下的都叫镜像层!
容器 = 容器镜像 可读可写层
1、Dockerfile文件:
-
# 基于的基础镜像
-
FROM python:3.7
-
# 维护者信息
-
MAINTAINER *** ***@qq.com
-
# 复制代码到code文件夹
-
COPY . ../code
-
# 设置code文件夹是工作目录
-
WORKDIR /code
-
RUN apt-get update
-
RUN apt-get install -y libgl1-mesa-dev
-
RUN pip install --upgrade pip
-
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
-
RUN pip install -r requirements.txt
-
# 申明镜像内服务监听的端口
-
EXPOSE 5000
-
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、创建镜像:
打开一个终端,进入到工作目录下,输入以下命令进行编译。
-
# docker build -t 镜像名:tag名 .
-
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脚本
-
$ cat nvidia-container-runtime-script.sh
-
-
# Add the package repositories
-
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
-
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
-
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
-
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
-
sudo systemctl restart docker
执行脚本
sh nvidia-container-runtime-script.sh
运行利用GPU的Ubuntu容器
-
# --rm 代表运行之后则删除容器
-
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容器
-
zxh@zxh-Precision-3640-Tower:~$ sudo docker ps
-
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
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
-
zxh@zxh-Precision-3640-Tower:~$ sudo docker exec -it 8a6742c70360 /bin/bash
-
root@8a6742c70360:/code# nvidia-smi
PS:使用方式一时,当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。因为这个原因,所以docker attach命令不太适合于生产环境。
6、将镜像打成tar包
docker image save flask2.0> flask.tar
7、导入打包好的镜像
-
cong@cong-desktop:~$sudo docker load -i flask.tar
-
open /var/lib/docker/tmp/docker-import-445297053/839f6fa1ac9daa8dc13a9b059857e5808443eda15bb1d63553a42a2ac79baf8a/json: no such file or directory
-
# 上述命名出现错误,可采用以下命令
-
cat flask.tar | sudo docker import - flask.tar
相关命令:
-
# 为库中镜像改名:
-
docker tag {imageID} {repository}:{tag}
-
# 停止所有容器
-
docker stop $(docker ps -aq)
-
# 删除所有容器
-
docker rm $(docker ps -aq)
-
# 通过命令可以从镜像仓库中拉取镜像
-
docker image pull <repository>:<tag>
-
# commit镜像:先进入基础镜像的容器里面,然后安装需要的包,最后执行如下命令:
-
docker commit <podid> <imagetag>
-
apt update
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgahece
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13