【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
然後再重新執行刪除映象的命令