因為比賽原因,需要上傳
docker
鏡像文件,沒辦法,又自學了一把
docker
,研究了一天,總算大概知道是怎么一回事了,其實說得明白點就是通過寫一個
Dockerfile
把你的程序里需要用到的所有依賴項封裝起來,此外再把你的程序也一并封裝進去,就這些東西構成一個
image
鏡像文件,然后把這個鏡像文件
push
到云端,其他人就可以用了,就這么一回事,難點在于怎么寫這個
Dockerfile
,這個挺廢時間的,因為被指定使用
CentOS
構建環境,其實如果不是為了比賽,可以選擇
Ubuntu
操作環境下進行的。
上Python3.5環境的
Dockerfile
代碼:
FROM nvidia/cuda:8.0-cudnn6-devel-centos7
# You can use alternative base mirror from https://hub.docker.com/r/nvidia/cuda
MAINTAINER Will_Ye "jiajie.ye@hotmail.com"
# 安裝你程序需要用到的所有依賴項,如Python,numpy,tensorflow等等
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.5.0/Python-3.5.0.tgz \
&& tar -zxvf Python-3.5.0.tgz \
&& cd Python-3.5.0 \
&& ./configure prefix=/usr/local/python3 \
&& make \
&& make install \
&& make clean \
&& cd .. \
&& rm -rf /Python-3.5.0* \
&& yum install -y epel-release \
&& yum install -y python-pip
RUN set -ex \
# 備份舊版本python
&& mv /usr/bin/python /usr/bin/python27 \
&& mv /usr/bin/pip /usr/bin/pip-python2.7 \
# 配置默認為python3
&& ln -s /usr/local/python3/bin/pip3 /usr/bin/pip \
&& pip install scipy \ #如果要用到scipy這個包,就需要用python2.7安裝,python3.5安裝會失敗
&& ln -s /usr/local/python3/bin/python3.5 /usr/bin/python \
# 修復因修改python版本導致yum失效問題
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
RUN yum -y install python-devel scipy
RUN pip install --upgrade pip
RUN pip install matplotlib
RUN pip install --upgrade setuptools
RUN pip install tensorflow-gpu
RUN pip install Pillow
#RUN pip install moviepy
RUN pip install keras
RUN pip install cmake
#安裝opencv的這一段有點問題,我還沒解決,因為后來發現寫的這個版本程序不需要用到cv2,暫時擱置,如果之后解決了,再重新補充,問題出在unzip上,可能要補充安裝解壓文件的工具就行了,還沒試
#RUN set -ex \
# &&wget https://github.com/opencv/opencv/archive/2.4.13.zip \
# &&unzip opencv-2.4.13.zip \
# &&cd opencv-2.4.13 \
# &&cmake CMakeLists.txt \
# &&mkdir build \
# &&cd build \
# &&cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_FFMPEG=OFF -D CMAKE_INSTALL_PREFIX=/usr/local .. \
# && make \
# && make install \
RUN pip install wave
RUN pip install scikit-image
# Add your project file
#注意這里的路徑是相對路徑,前面的是本地文件,后面的參數是目標存儲路徑,指鏡像中
ADD ./competition/application.py /data/application.py
ADD ./competition/model_weights20190430.h5 /data/model_weights20190430.h5
# Define the entry process command
#這個CMD操作只能有一個,要注意這點
CMD python /data/application.py
說一下其中里面一些語法的用途,一邊看一邊收集來的,整理一下:
-
RUN set -ex \
的作用:set
是shell
的一個命令,因為shell
的執行的過程中,如果有某個出錯了,也會繼續往下執行,set -ex
作用就是,當下面的命令執行出錯后,就退出執行,不在繼續往下執行,因為構建python環境很重要,有些問題報了可能被輸出的信息一下就刷上去了,沒留意到,后面就各種奇怪的報錯。 -
mkdir -p /urs/local/python3.5
中的-p
:平時可能大家也會用到,在構建Dockerfile
特別方便,少寫不少代碼,因為不加這個-p
是不能在沒有上一級文件夾的前提下創建目標文件/文件夾的,有了這個就會把上一級的文件夾也一并創建了。 -
ADD
和COPY
的區別:區別很簡單,ADD
強大一點,可以通過鏈接下載文件到指定路徑,COPY
就不行,只能復制本地的文件到指定路徑。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
