zoukankan      html  css  js  c++  java
  • 用docker搭建python项目运行环境

    Docker Hub镜像加速器

    1. 安装docker: curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
    2. 参考这篇注册阿里开发者,拿到专属加速器地址,类似于:https://xxxx.mirror.aliyuncs.com
    3. 参考Docker加速器下面的说明配置并重启docker,我是ubuntu 16.04,如下:
    sudo mkdir -p /etc/systemd/system/docker.service.d
    sudo tee /etc/systemd/system/docker.service.d/mirror.conf <<-'EOF'
    [Service]
    ExecStart=/usr/bin/docker daemon -H fd:// --registry-mirror=https://xxxx.mirror.aliyuncs.com
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    写Dockerfile

    # image for portfolio
    FROM ubuntu:16.04
    MAINTAINER wwy version: 0.1
    
    ENV LD_LIBRARY_PATH=/usr/local/lib
    
    COPY ./sources.list /etc/apt/
    RUN depends='make r-base r-base-dev' &&
        apt-get update &&
        apt-get install -y $depends
    	
    #anaconda
    COPY ./Anaconda2-4.2.0-Linux-x86_64.sh /tmp/
    RUN bash /tmp/Anaconda2-4.2.0-Linux-x86_64.sh -b
    ENV PATH /root/anaconda2/bin:$PATH
    
    #ta-lib
    COPY ./ta-lib-0.4.0-src.tar.gz /tmp/
    RUN cd /tmp &&
        tar -xzf ta-lib-0.4.0-src.tar.gz &&
        cd /tmp/ta-lib &&
        ./configure &&
        make &&
        make install
    	
    #pip
    COPY ./pip.conf /root/.config/pip/
    COPY ./SuiteSparse-4.5.3.tar.gz /tmp/
    ENV CVXOPT_SUITESPARSE_SRC_DIR=/tmp/SuiteSparse
    RUN cd /tmp &&
        tar xzf SuiteSparse-4.5.3.tar.gz &&
        pip install celery flasgger flask rpy2 arch pymongo grpc protobuf cvxopt ta-lib grpcio seaborn
    	
    #Qi4Trade
    COPY Qi4Trade /tmp/Qi4Trade
    RUN cd /tmp/Qi4Trade/trunk &&
        python setup.py install
    	
    #SITxuk
    COPY SITxuk /tmp/SITxuk
    RUN cd /tmp &&
        R CMD build SITxuk &&
        R CMD INSTALL SITxuk_0.1.0.tar.gz
    	
    #ndparser
    COPY ndparser.so /root/anaconda2/lib/python2.7/site-packages/
    COPY ndparser-1.0-py2.7.egg-info /root/anaconda2/lib/python2.7/site-packages/
    
    #clear
    RUN apt-get purge -y --auto-remove make &&
        apt-get clean &&
        rm -rf /tmp/* &&
        rm -rf /var/lib/apt/lists/*
    
    #porfolio-web
    COPY portfolio-web /root/portfolio-web
    COPY libgomp.so.1.0.0 /root/anaconda2/lib/
    ENV FLASK_SETTINGS=/root/portfolio-web/trunk/api/dev
    ENV PYTHONPATH=/root/portfolio-web/trunk
    WORKDIR /root/portfolio-web/trunk
    EXPOSE 8686
    CMD ["python","api/server.py"]
    
    # Add Tini. Tini operates as a process subreaper for jupyter. This prevents kernel crashes.
    ENV TINI_VERSION v0.6.0
    ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /usr/bin/tini
    RUN chmod +x /usr/bin/tini
    ENTRYPOINT ["/usr/bin/tini", "--"]
    EXPOSE 8888
    CMD ["jupyter","notebook","--port=8888","--no-browser","--ip=0.0.0.0"]
    

    Dockerfile要注意的点

    1. 用&&把所有命令串起来在一个Run里执行,避免产生太多层
    2. 可以把/etc/apt/sources.list拷过去,加速apt-get install; 把pip.conf拷到/root/.config/pip/pip.conf,指向douban的源,加速pip install
    3. 所有安装都是silent mode, 包括: apt-get -y、anaconda -b等
    4. 报pip not found: anaconda不会自动把bin加入PATH,需要手工加:ENV PATH /root/anaconda2/bin:$PATH
    5. 每个阶段的命令写在一起,从COPY+ENV+RUN,这样万一下面的COPY改了,还能重用以前的cache
    6. COPY要这么写:COPY ta-lib /tmp/ta-lib,如果只是COPY ta-lib /tmp/只会把ta-lib里面的内容拷过去
    7. 国内的镜像源有时apt-get install的时候会报"Hash Sum mismatch"的错误,不覆盖/etc/apt/sources.list,用官方的就好
    8. 很多server比如nginx、jupyter都默认监听localhost,要改成0.0.0.0,才能在容器外访问

    build + export image

    docker build -t test:v0.1 .
    docker run -i -p 8686:8686 test:v0.1
    docker save test:v0.1 | gzip > portfolio.tar.zip
    //复制到其他机器上,导入
    docker load -i portfolio.tar.zip
    
  • 相关阅读:
    Python 基础之 线程与进程
    python 基础之 模块
    Python 基础之socket编程(三)
    Python 基础之socket编程(二)
    Python全栈开发之11、进程和线程
    用 Python实现一个ftp+CRT(不用ftplib)
    Python全栈开发之10、网络编程
    Python全栈开发之9、面向对象、元类以及单例
    Python全栈开发之8、装饰器详解
    用python实现一个无界面的2048
  • 原文地址:https://www.cnblogs.com/AlexanderYao/p/6418746.html
Copyright © 2011-2022 走看看