博客
关于我
Dockerfile构建Python3.5环境---亲测可行代码
阅读量:285 次
发布时间:2019-03-03

本文共 2908 字,大约阅读时间需要 9 分钟。

因为比赛原因,需要上传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/cudaMAINTAINER Will_Ye# 安装你程序需要用到的所有依赖项,如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-pipRUN 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 deltarpmRUN yum -y install python-devel scipyRUN pip install --upgrade pipRUN pip install matplotlibRUN pip install --upgrade setuptoolsRUN pip install tensorflow-gpuRUN pip install Pillow#RUN pip install moviepyRUN pip install kerasRUN 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 waveRUN pip install  scikit-image# Add your project file#注意这里的路径是相对路径,前面的是本地文件,后面的参数是目标存储路径,指镜像中ADD ./competition/application.py /data/application.pyADD ./competition/model_weights20190430.h5 /data/model_weights20190430.h5# Define the entry process command#这个CMD操作只能有一个,要注意这点CMD python /data/application.py

说一下其中里面一些语法的用途,一边看一边收集来的,整理一下:

  1. RUN set -ex \的作用:setshell的一个命令,因为shell的执行的过程中,如果有某个出错了,也会继续往下执行,set -ex作用就是,当下面的命令执行出错后,就退出执行,不在继续往下执行,因为构建python环境很重要,有些问题报了可能被输出的信息一下就刷上去了,没留意到,后面就各种奇怪的报错。
  2. mkdir -p /urs/local/python3.5中的-p:平时可能大家也会用到,在构建Dockerfile特别方便,少写不少代码,因为不加这个-p是不能在没有上一级文件夹的前提下创建目标文件/文件夹的,有了这个就会把上一级的文件夹也一并创建了。
  3. ADDCOPY的区别:区别很简单,ADD强大一点,可以通过链接下载文件到指定路径,COPY就不行,只能复制本地的文件到指定路径。

转载地址:http://cxgl.baihongyu.com/

你可能感兴趣的文章
数据结构与算法之栈
查看>>
【数据库】第七章课后题
查看>>
第四章 串、数组和广义表 —— BF算法和KMP算法
查看>>
[选拔赛1]花园(矩阵快速幂),JM的月亮神树(最短路),保护出题人(斜率优化)
查看>>
DLA:一种深度网络特征融合方法
查看>>
leetcode114(二叉树展开为链表)
查看>>
java —— static 关键字
查看>>
在 Python 调试过程中设置不中断的断点 | Linux 中国
查看>>
AI 系统向自动化编码迈进 | Linux 中国
查看>>
使用 Jupyter Notebooks 构建一个远程管理控制台 | Linux 中国
查看>>
使用开源可视化工具来理解你的 Python 代码 | Linux 中国
查看>>
【2021 ECUG Con】聚势而来,与你相约花开时
查看>>
硬核观察 | 有人在比特币骗局中损失了 10 个比特币
查看>>
FreeDOS 的简单介绍 | Linux 中国
查看>>
使用 top 命令了解 Fedora 的内存使用情况 | Linux 中国
查看>>
怎样解决 “sub process usr bin dpkg returned an error code 1” 错误
查看>>
Bat:一种具有语法高亮和 Git 集成的 Cat 类命令 | Linux 中国
查看>>
Linux 上最好的五款音乐播放器 | Linux 中国
查看>>
网易云首倡中台方法论,发布全链路中台技术方案
查看>>
传输层协议
查看>>