因?yàn)楸荣愒颍枰蟼?
docker
鏡像文件,沒(méi)辦法,又自學(xué)了一把
docker
,研究了一天,總算大概知道是怎么一回事了,其實(shí)說(shuō)得明白點(diǎn)就是通過(guò)寫(xiě)一個(gè)
Dockerfile
把你的程序里需要用到的所有依賴(lài)項(xiàng)封裝起來(lái),此外再把你的程序也一并封裝進(jìn)去,就這些東西構(gòu)成一個(gè)
image
鏡像文件,然后把這個(gè)鏡像文件
push
到云端,其他人就可以用了,就這么一回事,難點(diǎn)在于怎么寫(xiě)這個(gè)
Dockerfile
,這個(gè)挺廢時(shí)間的,因?yàn)楸恢付ㄊ褂?
CentOS
構(gòu)建環(huán)境,其實(shí)如果不是為了比賽,可以選擇
Ubuntu
操作環(huán)境下進(jìn)行的。
上Python3.5環(huán)境的
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"
# 安裝你程序需要用到的所有依賴(lài)項(xiàng),如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 \
# 配置默認(rèn)為python3
&& ln -s /usr/local/python3/bin/pip3 /usr/bin/pip \
&& pip install scipy \ #如果要用到scipy這個(gè)包,就需要用python2.7安裝,python3.5安裝會(huì)失敗
&& ln -s /usr/local/python3/bin/python3.5 /usr/bin/python \
# 修復(fù)因修改python版本導(dǎo)致yum失效問(wèn)題
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的這一段有點(diǎn)問(wèn)題,我還沒(méi)解決,因?yàn)楹髞?lái)發(fā)現(xiàn)寫(xiě)的這個(gè)版本程序不需要用到cv2,暫時(shí)擱置,如果之后解決了,再重新補(bǔ)充,問(wèn)題出在unzip上,可能要補(bǔ)充安裝解壓文件的工具就行了,還沒(méi)試
#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
#注意這里的路徑是相對(duì)路徑,前面的是本地文件,后面的參數(shù)是目標(biāo)存儲(chǔ)路徑,指鏡像中
ADD ./competition/application.py /data/application.py
ADD ./competition/model_weights20190430.h5 /data/model_weights20190430.h5
# Define the entry process command
#這個(gè)CMD操作只能有一個(gè),要注意這點(diǎn)
CMD python /data/application.py
說(shuō)一下其中里面一些語(yǔ)法的用途,一邊看一邊收集來(lái)的,整理一下:
-
RUN set -ex \
的作用:set
是shell
的一個(gè)命令,因?yàn)?shell
的執(zhí)行的過(guò)程中,如果有某個(gè)出錯(cuò)了,也會(huì)繼續(xù)往下執(zhí)行,set -ex
作用就是,當(dāng)下面的命令執(zhí)行出錯(cuò)后,就退出執(zhí)行,不在繼續(xù)往下執(zhí)行,因?yàn)闃?gòu)建python環(huán)境很重要,有些問(wèn)題報(bào)了可能被輸出的信息一下就刷上去了,沒(méi)留意到,后面就各種奇怪的報(bào)錯(cuò)。 -
mkdir -p /urs/local/python3.5
中的-p
:平時(shí)可能大家也會(huì)用到,在構(gòu)建Dockerfile
特別方便,少寫(xiě)不少代碼,因?yàn)椴患舆@個(gè)-p
是不能在沒(méi)有上一級(jí)文件夾的前提下創(chuàng)建目標(biāo)文件/文件夾的,有了這個(gè)就會(huì)把上一級(jí)的文件夾也一并創(chuàng)建了。 -
ADD
和COPY
的區(qū)別:區(qū)別很簡(jiǎn)單,ADD
強(qiáng)大一點(diǎn),可以通過(guò)鏈接下載文件到指定路徑,COPY
就不行,只能復(fù)制本地的文件到指定路徑。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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