1. 程式人生 > >【centos】Dockerfile 建立pytorch程式執行環境的映象

【centos】Dockerfile 建立pytorch程式執行環境的映象

目的:基於pytorch框架實現了一個卷積神經網路,現想建立該程式的執行映象。

程式執行所需要的環境:

CUDA 8.0 

cudnn 7

ffmpeg

Anaconda3.4

cv2

Pytorch0.4.1

流程:

0. 我的程式在test資料夾下,因此先進入test資料夾所在的路徑

1. 編寫Dockerfile

2. service docker start 開啟Docker服務

3. docker build 指令建立映象 (docker build -t imageName:tag .)

4. docker tag 給本地映象打標籤 (docker tag 本地映象名:標籤 遠端倉庫名/映象名/標籤)

4. docker push 釋出映象(登陸倉庫之後)(docker push 遠端倉庫名/映象名/標籤)

5. service docker stop 停止Docker服務

Dockerfile:

FROM nvidia/cuda:8.0-cudnn7-devel-centos7 #  基礎映象
LABEL maintainer "bbp94" #維護者資訊

# 安裝bzip2
RUN yum -y install bzip2

# 安裝ffmpeg
RUN yum install -y epel-release && \
    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && \
    rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro && \
    rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm && \
    yum install -y ffmpeg

# 安裝Anaconda
COPY ./Anaconda3-4.2.0-Linux-x86_64.sh /tmp/Anaconda3-4.2.0-Linux-x86_64.sh
WORKDIR /tmp
RUN sh -c '/bin/echo -e "\nyes\n\nyes" | sh Anaconda3-4.2.0-Linux-x86_64.sh'

#設定環境變數
ENV PATH /root/anaconda3/bin:$PATH

#安裝opencv 和 threadpool 和 pytorch
COPY ./opencv_python-3.4.3.18-cp35-cp35m-manylinux1_x86_64.whl /tmp/opencv_python-3.4.3.18-cp35-cp35m-manylinux1_x86_64.whl
COPY ./torch-0.4.1-cp35-cp35m-linux_x86_64.whl /tmp/torch-0.4.1-cp35-cp35m-linux_x86_64.whl

RUN pip install threadpool && \
    pip install opencv_python-3.4.3.18-cp35-cp35m-manylinux1_x86_64.whl && \
    pip install torch-0.4.1-cp35-cp35m-linux_x86_64.whl && \
    pip install torchvision

# 設定軟連線
RUN rm -rf /usr/bin/python && ln -s /root/anaconda3/bin/python /usr/bin/python

解釋:

1. Dockerfile 有規定第一行必須是From命令列,From 後跟基礎映象,開源的基礎映象可以從Docker的官網獲取,如在搜尋框輸入centos,就能得到一系列的相關基礎映象。若是想不需要基礎映象,可以寫From scrach代表空白映象

2. 安裝bzip2,檔案壓縮工具,這是後續安裝其他環境所需要的工具。

3. 安裝Anaconda。安裝過程中會詢問安裝路徑之類的,所以加上sh -c '/bin/echo -e "\nyes\n\nyes" 即按詢問的順序回車,yes。ENV表示設定環境變數。

4. 安裝程式所需要的其他庫,如cv2

5. 安裝pytorch。由於本地已經存在whl檔案,所以直接copy過來安裝,若是不存在,可以直接pip install url。相關安裝命令可以去pytorch官網檢視。

建立好之後,可以用Docker build -t name:tag  . 來建立映象,若Docker不在當前資料夾,可用-f指定。

總結:個人的理解,以Dockferile建立映象,Dockfile像一個shell指令碼,把安裝環境的步驟寫進Dockerfile,再用build命令執行該“指令碼”。RUN後面的命令列和用shell命令列安裝環境所使用的命令列是一樣的。

管理映象:

建立過程中建議常用df -h指令檢視磁碟使用情況,由於建立不當,往往會創建出好幾個G的映象,為避免root分割槽滿載,因此對沒用的容器和映象要及時刪除。

1. docker images可以檢視當前存在的映象

2. docker rmi 映象ID 刪除某映象 

3. 遇到刪除映象失敗並提示某容器正在使用該映象時,可以先停止所有的container,指令:docker stop $(docker ps -a -q)

再檢視當前存在的容器:docker ps -a

刪除容器指令:docker rm 容器ID

然後再重新執行刪除映象的命令