如何将深度学习中的项目打包成Dockerfile

如何将深度学习中的项目打包成镜像,并编写Dockerfile

  • 背景
    • 什么是Dockerfile
    • Dockerfile中命令
  • 开始吧
    • 目录结构
    • Dockerfile
    • 下面开始运行Dockerfile
    • 进入容器
  • 后续~~~~~~~~~~~
  • 将自己建立的镜像部署到Kubernetes中

背景

我这里有一个深度学习的项目,对遥感卫星影像进行目标检测,我会将项目放到github中https://github.com/ZYMXIXI/YoloV3_oiltank_Kuberbetes,模型太大,我放在链接:https://pan.baidu.com/s/1zE61WV4scAd5M3LUXR1yrA
提取码:m2c8 ,下面简单的介绍什么是Dockerfile,Dockerfile中的 命令,和如何将简单写一个Dockerfile,详细的阐述如何将本文中的遥感项目打包到Dockerfile,后续并将如何将自己制作的容器应用带Kubernetes的pod中,以及相应的yaml文件等。

什么是Dockerfile

https://yeasy.gitbooks.io/docker_practice/image/multistage-builds/

Dockerfile中命令

开始吧

目录结构

首先先看一下我的目录结构,Dockerfile就不用多bb了,后面会讲到;start.sh文件是我写的一个自启动的脚本,在容器制作成功后,进入容器的一个脚本;YOLO文件夹下为一个简单的目标识别代码,我也会将这个简单的代码以及自己针对大尺度遥感影像改进的目标识别代码上传至我的github,在这部分中mode_data保存yolov3中的相关信息,包括训练好的模型、预测种类、锚等,不了解的可以去看一下yolov3的代码,requirements保存的是需要的库,test为测试的图片,yolo3为模型代码,yolo_test.py为测试代码。大体的目录结构介绍完毕。

├── Dockerfile
├── start.sh
└── YOLO
    ├── font
    │   ├── FiraMono-Medium.otf
    │   └── SIL Open Font License.txt
    ├── model_data
    │   ├── coco_classes.txt
    │   ├── oiltank.txt
    │   ├── readme.txt
    │   ├── SAR
    │   │   ├── readme.txt
    │   │   └── trained_weights_final.h5
    │   ├── tiny_yolo_anchors.txt
    │   ├── trained_weights_final.h5
    │   ├── yolo_anchors.txt
    │   └── yolo_weights.h5
    ├── requirements.txt
    ├── result_oiltank
    ├── test
    │   ├── 12.tif
    │   ├── guigang.tif
    │   ├── roi5.tif
    │   ├── test2.tif
    │   ├── test3.tif
    │   └── zhang.tif
    ├── yolo3
    │   ├── __init__.py
    │   ├── __init__.pyc
    │   ├── model.py
    │   ├── model.pyc
    │   ├── __pycache__
    │   │   ├── __init__.cpython-35.pyc
    │   │   ├── __init__.cpython-36.pyc
    │   │   ├── model.cpython-35.pyc
    │   │   ├── model.cpython-36.pyc
    │   │   ├── utils.cpython-35.pyc
    │   │   └── utils.cpython-36.pyc
    │   ├── test.py
    │   ├── utils.py
    │   └── utils.pyc
    ├── yolo_test.py
    ├── yolov3.cfg
    └── yolov3_oiltank.yml

Dockerfile

下面为Dockerfile,当然以下安装的库是我自己所需要的库,如果你需要其他库,自行添加。

  1 #导入环境
  2 FROM centos:latest
   ##标注信息
  3 MAINTAINER Zhangym "[email protected]"
  4 
  5 
  6 #安装python
  7 
  8 RUN set -ex \
  9     && yum install -y wget tar libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make initscripts \
 10     && wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz \
 11     && tar -zxvf Python-3.6.8.tgz \
 12     && cd Python-3.6.8 \
 13     && ./configure prefix=/usr/local/python3 \
 14     && make \
 15     && make install \
 16     && make clean \
 17     && cd .. \
 18     && rm -rf /Python-3.6.8* \
 19     && yum install -y epel-release \
 20     && yum install -y python-pip
 21 #明明下的为python3.6,这里为什么会出现python2.7,我也不晓得,如果你在这里打印python -V 会出现python2.7版本
 22 RUN set -ex \
 23  # 备份旧版本python
 24      && mv /usr/bin/python /usr/bin/python27 \
 25      && mv /usr/bin/pip /usr/bin/pip-python2.7 \
 26      # 配置默认为python3
 27      && ln -s /usr/local/python3/bin/pip3 /usr/bin/pip \
 28      && pip install scipy -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \
 29  #如果要用到scipy这个包,就需要用python2.7安装,python3.5安装会失败
 30      && ln -s /usr/local/python3/bin/python3.6 /usr/bin/python
 31 
 32  ##修复python版本改变,yum问题
 33 RUN set -ex \
 34      && sed -i "s#/usr/bin/python#/usr/bin/python2.7#" /usr/bin/yum \
 35      && sed -i "s#/usr/bin/python#/usr/bin/python2.7#" /usr/libexec/urlgrabber-ext-down \
 36      && yum install -y deltarpm
 37 
 38 ##配置清华源
 39 RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
 40 
 41 #在这里打印出python版本,正确显示python3.6
 42 RUN python -V
 43 #RUN yum -y install python-devel scipy
 44 
 45 
 46 ##查看是否安装版本
 47 #RUN python -V
 48 #其实我的Dockerfile仅仅写的是以下3行而已!!!!以上都是在安装环境而已!!!!
 49 #定义容器中的工作目录
 50 ENV CODE_DIR=/YOLO
 51 RUN mkdir -p $CODE_DIR/yolov3_oiltank/
 52 COPY ./YOLO $CODE_DIR/yolov3_oiltank/
 53 RUN python -V
 54
 55
 56
 57 
 58 RUN python -m pip install --upgrade pip
 59 #RUN pip install --upgrade setuptools
 60 RUN pip install keras tensorflow-gpu opencv-python -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
 61 RUN pip install -r $CODE_DIR/yolov3_oiltank/requirements.txt
 62 
 63 
 64 #ADD ./YOLO /data/yolov3_oiltank/
 65 
 66 #CMD执行命令
 67 COPY ./start.sh /usr/bin/my-start.sh
 68 RUN chmod +x /usr/bin/my-start.sh
 69 CMD ["my-start.sh"]

下面为start.sh

  1 #!/bin/bash  
  2 cd /YOLO/yolov3_oiltank/
  3 #nohup python yolo_test.py >>./watch.out &
  4 python yolo_test.py
  5 
  6 sleeptime=1000
  7 while((1));do
  8   now=`date '+%Y-%m-%d %H:%M:%S'`
  9   echo $now>>./watch.out
 10   sleep $sleeptime
 11 done

下面开始运行Dockerfile

下面为执行docker build 的命令

docker build -t yolov3:v1 . 

当正确执行后,会出现以下情况

Sending build context to Docker daemon  779.2MB
Step 1/17 : FROM centos:latest
 ---> 67fa590cfc1c
Step 2/17 : MAINTAINER Zhangym "[email protected]"
 ---> Using cache
 ---> d777e5310598
Step 3/17 : RUN set -ex     && yum install -y wget tar libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make initscripts     && wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz     && tar -zxvf Python-3.6.8.tgz     && cd Python-3.6.8     && ./configure prefix=/usr/local/python3     && make     && make install     && make clean     && cd ..     && rm -rf /Python-3.6.8*     && yum install -y epel-release     && yum install -y python-pip
 ---> Using cache
 ---> ab4427be3969
Step 4/17 : RUN set -ex      && mv /usr/bin/python /usr/bin/python27      && mv /usr/bin/pip /usr/bin/pip-python2.7      && ln -s /usr/local/python3/bin/pip3 /usr/bin/pip      && pip install scipy -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com      && ln -s /usr/local/python3/bin/python3.6 /usr/bin/python
 ---> Using cache
 ---> 21d37895a71d
Step 5/17 : RUN set -ex      && sed -i "s#/usr/bin/python#/usr/bin/python2.7#" /usr/bin/yum      && sed -i "s#/usr/bin/python#/usr/bin/python2.7#" /usr/libexec/urlgrabber-ext-down      && yum install -y deltarpm
 ---> Using cache
 ---> c8802946d0f2
Step 6/17 : RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
 ---> Using cache
 ---> 76e2c2f0db95
Step 7/17 : RUN python -V
 ---> Using cache
 ---> 308cc6360dec
Step 8/17 : ENV CODE_DIR=/YOLO
 ---> Using cache
 ---> 72cfcfca3a56
Step 9/17 : RUN mkdir -p $CODE_DIR/yolov3_oiltank/
 ---> Using cache
 ---> b486e1049ace
Step 10/17 : COPY ./YOLO $CODE_DIR/yolov3_oiltank/
 ---> Using cache
 ---> 95b637f93203
Step 11/17 : RUN python -V
 ---> Using cache
 ---> 0c66c6937f2f
Step 12/17 : RUN python -m pip install --upgrade pip
 ---> Using cache
 ---> fbbe28f67a18
Step 13/17 : RUN pip install keras tensorflow-gpu opencv-python -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
 ---> Using cache
 ---> 9a4c82746c10
Step 14/17 : RUN pip install -r $CODE_DIR/yolov3_oiltank/requirements.txt
 ---> Using cache
 ---> c36cb4e77362
Step 15/17 : COPY ./start.sh /usr/bin/my-start.sh
 ---> Using cache
 ---> b5b61e0dbba2
Step 16/17 : RUN chmod +x /usr/bin/my-start.sh
 ---> Using cache
 ---> b5a51ec26b91
Step 17/17 : CMD ["my-start.sh"]
 ---> Running in e1ae42e95671
Removing intermediate container e1ae42e95671
 ---> 243e68ee08af
Successfully built 243e68ee08af
Successfully tagged hub.geivis.io/zhangym/yolov3_oiltank:v1

进入容器

先看一下你的镜像是否已经在了

docker images 或 docker images | grep hub

这是会出现你已经建立的镜像

hub.geovis.io/zhangym/yolov3_oiltank       v1                                        243e68ee08af        3 hours ago         3.15GB

这时你可以进入你的容器中,并且在容易内运行你的代码

docker run -itd 243e68ee08af bash

这是会显示你已经因为我把我的start.sh挂载到了容器内的/user/bin/my-start.sh下

[root@1441d808fe0d /]#my-start.sh

这里就会执行test_yolo.py,对/YOLO/yolov3_oiltank/result_oiltank
/test/下的文件夹进行预测,将预测的结果图保存到/YOLO/yolov3_oiltank/result_oiltank/

如何将深度学习中的项目打包成Dockerfile_第1张图片
/YOLO/yolov3_oiltank/result_oiltank/ 下的结果图

-rw-r--r-- 1 root root  4041444 Sep 29 11:23 12.tif12.tif
-rw-r--r-- 1 root root  2268612 Sep 29 11:23 guigang.tifguigang.tif
-rw-r--r-- 1 root root      195 Sep 29 11:23 result.txt
-rw-r--r-- 1 root root  2268612 Sep 29 11:23 roi5.tifroi5.tif
-rw-r--r-- 1 root root  4041444 Sep 29 11:23 test2.tiftest2.tif
-rw-r--r-- 1 root root  2268612 Sep 29 11:23 test3.tiftest3.tif
-rw-r--r-- 1 root root 10840274 Sep 29 11:23 zhang.tifzhang.tif

然后可以将的docker images 上传到Harbor或其他的仓库中

后续~~~~~~~~~~~

将自己建立的镜像部署到Kubernetes中

你可能感兴趣的:(Docker,Docker,深度学习,部署)