PythonStock(21)股票系统:重新修改docker脚本,升级python3。精简代码。

105 篇文章 13 订阅
41 篇文章 310 订阅

前言


使用Python开发一个web股票项目。
【github项目地址】:
https://github.com/pythonstock/stock
【知乎专栏地址】:
https://zhuanlan.zhihu.com/pythonstock
【docker hub地址下载】:
https://hub.docker.com/r/pythonstock/pythonstock
【相关stock资料分类】:
http://blog.csdn.net/freewebsys/article/category/7076584
主要使用开发语言是python。
使用的lib库是pandas,tushare,TensorFlow,tornado等。

本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/81665552
未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

1,关于股票


最近抽时间把docker 镜像重新打了下。
之前使用的是tensorlfow 因为那个是安装 pandas numpy tushare 还都不方便。
造成镜像特别的大,要下载好长时间,而且折腾了几次,还使用的是python2.
现在 tensorflow 支持的特别好,python3 也支持 tensroflow server 了,于是都升级了下。
都挺好用的。
为了让镜像小想了很多办法呢。

pythonstock/pythonstock                    latest              934a19df2f8a        26 minutes ago      436MB

本地是 436MB 线上是 152 MB,压缩了2.86 倍。这样以后的更新下载,升级,就快多了。

2,构建镜像


#使用 python:3.6-slim 做基础镜像减少大小。其中tensorflow再用另外的镜像跑数据。
FROM docker.io/python:3.6-slim

# https://opsx.alibaba.com/mirror
# 使用阿里云镜像地址。修改debian apt 更新地址,pip 地址,设置时区。
RUN echo  "deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib\n\
deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib\n\
deb http://mirrors.aliyun.com/debian-security stretch/updates main\n\
deb-src http://mirrors.aliyun.com/debian-security stretch/updates main\n\
deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib\n\
deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib\n\
deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib\n\
deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" > /etc/apt/sources.list && \
echo  "[global]\n\
trusted-host=mirrors.aliyun.com\n\
index-url=http://mirrors.aliyun.com/pypi/simple" > /etc/pip.conf && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone

#安装 mysqlclient tushare (pandas ,numpy) tornado bokeh
# apt-get autoremove -y 删除没有用的依赖lib。减少镜像大小。1MB 也要节省。
# apt-get --purge remove 软件包名称 , 删除已安装包(不保留配置文件)。
RUN apt-get update && apt-get install -y gcc make axel python3-dev default-libmysqlclient-dev libxml2-dev cron supervisor && \
    pip3 install mysqlclient sqlalchemy && \
    pip3 install requests && \
    pip3 install lxml bs4 && \
    pip3 install numpy pandas  && \
    pip3 install tushare && \
    pip3 install tornado torndb && \
    pip3 install bokeh stockstats && \
    cd /tmp && axel https://nchc.dl.sourceforge.net/project/ta-lib/ta-lib/0.4.0/ta-lib-0.4.0-src.tar.gz && \
    tar xvfz ta-lib-0.4.0-src.tar.gz && \
    cd ta-lib && ./configure && make && make install  && cd /tmp && rm -rf * && \
    pip3 install TA-Lib  && \
    apt-get --purge remove -y gcc make axel python3-dev default-libmysqlclient-dev libxml2-dev && \
    rm -rf /root/.cache/* && apt-get clean && apt-get autoremove -y

# /usr/local/lib/python3.6/site-packages/pandas/
#1.解决 pandas 数据插入问题。直接修改数据库驱动 sqlalchemy
# 修改:statement.replace("INSERT INTO","INSERT IGNORE INTO")
# /usr/local/lib/python3.6/site-packages/sqlalchemy/dialects/mysql/mysqldb.py
# 增加了一个 IGNORE 参数。
#2.解决torndb在python3下面的问题:
#http://blog.csdn.net/littlethunder/article/details/8917378
RUN echo `date +%Y-%m-%d:%H:%M:%S` >> /etc/docker.build && \
    sed -i -e 's/executemany(statement/executemany(statement.replace\("INSERT INTO","INSERT IGNORE INTO")/g' \
        /usr/local/lib/python3.6/site-packages/sqlalchemy/dialects/mysql/mysqldb.py && \
    rm -f /etc/cron.daily/apt-compat /etc/cron.daily/dpkg /etc/cron.daily/passwd && \
    sed -i -e 's/itertools\.izip/zip/g' \
    /usr/local/lib/python3.6/site-packages/torndb.py

#增加语言utf-8
ENV LANG=zh_CN.UTF-8
ENV LC_CTYPE=zh_CN.UTF-8
ENV LC_ALL=C
ENV PYTHONPATH=/data/stock

WORKDIR /data

#add cron sesrvice.
#每分钟,每小时1分钟,每天1点1分,每月1号执行
RUN mkdir -p /etc/cron.minutely && mkdir -p /etc/cron.hourly && mkdir -p /etc/cron.monthly && \
    echo "SHELL=/bin/sh \n\
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin \n\
# min   hour    day     month   weekday command \n\
*/1     *       *       *       *       /bin/run-parts /etc/cron.minutely \n\
10       *       *       *       *       /bin/run-parts /etc/cron.hourly \n\
30       16       *       *       *       /bin/run-parts /etc/cron.daily \n\
30       17       1,10,20       *       *       /bin/run-parts /etc/cron.monthly \n" > /var/spool/cron/crontabs/root && \
    chmod 600 /var/spool/cron/crontabs/root


#增加服务端口
EXPOSE 8888 9999 6006 8500 9001

#经常修改放到最后:
ADD jobs /data/stock/jobs
ADD libs /data/stock/libs
ADD web /data/stock/web
ADD supervisor /etc/supervisor

ADD jobs/cron.minutely /etc/cron.minutely
ADD jobs/cron.hourly /etc/cron.hourly
ADD jobs/cron.daily /etc/cron.daily
ADD jobs/cron.monthly /etc/cron.monthly

RUN mkdir -p /data/logs && ls /data/stock/ && chmod 755 /data/stock/jobs/run_* &&  \
    chmod 755 /etc/cron.minutely/* && chmod 755 /etc/cron.hourly/* && \
    chmod 755 /etc/cron.daily/* && chmod 755 /etc/cron.monthly/*

ENTRYPOINT ["supervisord","-n","-c","/etc/supervisor/supervisord.conf"]

首先使用的是debian的一个精简的镜像构建的叫:slim 使用的是debian9 的系统。
然后安装软件的依赖时候的 python3-dev default-libmysqlclient-dev libxml2-dev 开发库,在装完python lib库之后。
都卸载了。apt-get autoremove -y 删除没有用的依赖lib。减少镜像大小。1MB 也要节省。
apt-get –purge remove 软件包名称 , 删除已安装包(不保留配置文件)。
这些命令脚本必须在一次执行成功,要是拆分成多个的化 docker 的大小还是减少不了的。
因为是多个层了。

同时还安装了一个 ta-lib 的股票分析库。后续专门说下。
还是使用 supervisor 启动应用程序,唯一可惜的就是 supervisor 只支持 python2 ,使用的apt-get进行安装的。
造成又多装了一个python2,浪费资源。
不过也不纠结了,等 supervisor 升级支持 python3 在说了。需要等到 3.4 才的版本才行呢,现在还是 3.3的。

3,设置PYTHONPATH


使用环境变量设置了下:ENV PYTHONPATH=/data/stock
这样程序当中的引用

import libs.stock_web_dic as stock_web_dic
import web.base as webBase
import libs.common as common

就都好使用了。

4,总结


本地是 436MB 线上是 152 MB,压缩了2.86 倍。
主要是没有用 tensorflow的官方镜像,而是自己打了个python lib的。
计划 tensorflow 的还是要做,只不过要拆分到别的项目上去,这个就负责抓取股票数据。
进行数据展示统计的。数据统计分析也做,就是不做tensorflow的分析了。
因为因为,那个需要gpu打的镜像不一样。

本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/81665552

博主地址是:http://blog.csdn.net/freewebsys

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值