副标
Dockerize your Python Application
dockerfile python example
dockerfile python flask example

flask框架为例

Dockerfile

FROM alpine:latest

# 打标签
LABEL version="1.0" \
    description="alpine:latest" \
    maintainer="wwek<licoolgo@gmail.com>"

# 配置apk包加速镜像为阿里
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

# 安装一些基础包
RUN apk update \
    && apk upgrade \
    && apk add s6 \
    && apk add bash \
    # && apk add nghttp2-dev \
    && apk add ca-certificates \
    && apk add wget \
    # && apk add curl \
    # && apk add tcpdump \
    # && apk add bash-completion \
    && apk add iputils \
    && apk add iproute2 \
    && apk add libc6-compat \
    && apk add -U tzdata \
    && rm -rf /var/cache/apk/*

# 设置 操作系统时区
RUN rm -rf /etc/localtime \
 && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 设置时区变量
ENV TIME_ZONE Asia/Shanghai

# 安装 python3、升级pip、setuptools
RUN apk add --no-cache python3 \
    #&& apk add --no-cache python3-dev \
    && python3 -m ensurepip \
    && rm -r /usr/lib/python*/ensurepip \
    && pip3 install --default-timeout=100 --no-cache-dir --upgrade pip \
    && pip3 install --default-timeout=100 --no-cache-dir --upgrade setuptools \
    && if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi \
    && if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi \
    && rm -rf /var/cache/apk/* \
    && rm -rf ~/.cache/pip

# 设置 语言支持
ENV LANG=C.UTF-8

# 配置 应用工作目录
WORKDIR /data/apps/appdir

# 增加 项目文件
ADD appmain.py ./
ADD 你的py文件2.py ./
ADD 目录1 ./
ADD requirements.txt ./

# 安装 项目依赖包
RUN pip install -r requirements.txt

# 配置 对外端口
EXPOSE 11000

# 设置启动时预期的命令参数, 可以被 docker run 的参数覆盖掉.
CMD ["python", "appmain.py"]

使用pyenv管理安装Python多版本共存

安装pyenv

安装依赖库

yum -y install readline readline-devel readline-static openssl openssl-devel openssl-static sqlite-devel bzip2-devel bzip2-libs automake gcc git

git克隆安装pyenv

git clone git://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec $SHELL -l

安装Python

查看可安装的版本

pyenv install --list

 

安装指定版本

安装 python2.7.7 和 python3.4.1

pyenv install 2.7.7
pyenv install 3.4.1

 

更新数据库

安装完成之后需要对数据库进行更新:

 pyenv rehash

 

设置全局的python版本

pyenv global 2.7.7
pyenv versions
system
* 2.7.7 (set by /root/.pyenv/version)
3.4.1

 

当前全局的python版本已经变成了2.7.7。
也可以使用pyenv local或pyenv shell临时改变python版本。
使用 pyenv global system 切换为系统自带。

确认python版本

python
Python 2.7.7 (default, Jun 24 2014, 07:50:02) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

 

使用python

输入python即可使用新版本的python;
系统命令会以/usr/bin/python的方式直接调用老版本的python;
使用pip安装第三方模块时会安装到~/.pyenv/versions/2.7.7下,不会和系统模块发生冲突。

 

安装ipython

pip install readline ipython

 

主要参考斌爷的博客: http://opslinux.com/python_viode_1.html