Docker制作python环境
原文地址:Docker制作python环境 – 无敌牛
欢迎参观我的博客网站:无敌牛 – 技术/著作/典籍/分享等
分享一个用docker制作不同python环境的方法。
python的版本更新很快,这些版本都可以从官网下载到源码。在工作中涉及给老代码搭建环境的问题,而系统源里很有可能是没有对应的python版本的,这时候,我们就需要手动搭建环境了。在系统中搭建的方法可以查看往期文章:python历史版本安装 – 无敌牛
下载了源码,制作docker镜像就比较简单了。下面是以python3.7.8为例制作的Dockerfile 文件。系统镜像使用的阿里龙蜥8.6环境(CentOS的平替系统)。在国内官网docker的源不太友好,所有需要修改一下docker源为国内的镜像,这样下载更快更方便。修改源具体方法查看往期文章:dify大模型应用开发平台搭建 – 无敌牛 安装运行 小节。
# 使用 OpenAnolis 8.6 作为基础镜像
FROM anolisos:8.6# 设置系统源
RUN sed -e 's|^mirrorlist=|#mirrorlist=|g' \-e 's|^#baseurl=http://mirrors.tuna.tsinghua.edu.cn/anolis|baseurl=https://mirrors.aliyun.com/anolis|g' \-i.bak /etc/yum.repos.d/*.repo# 安装编译 Python 3.7 所需的依赖
RUN dnf update -y && \dnf groupinstall -y "Development Tools" && \dnf install -y \wget \gcc \make \zlib-devel \bzip2-devel \readline-devel \sqlite-devel \openssl-devel \ncurses-devel \tk-devel \libffi-devel \xz-devel \gdbm-devel \vim \net-tools \tzdata && \dnf clean all# 设置时区为上海
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \echo "Asia/Shanghai" > /etc/timezone# 设置环境变量
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
ENV PYTHONUNBUFFERED 1# 下载并编译安装 Python 3.7。直接下载可能会下载失败,可以用浏览器下载好后COPY到镜像。
# wget https://www.python.org/ftp/python/3.7.8/Python-3.7.8.tgz
COPY Python-3.7.8.tgz .
RUN tar xzf Python-3.7.8.tgz && \cd Python-3.7.8 && \./configure --enable-optimizations --enable-shared --prefix=/usr/local LDFLAGS="-Wl,-rpath /usr/local/lib" && \make -j$(nproc) && \make altinstall && \rm -rf Python-3.7.8*# 创建符号链接
RUN ln -s /usr/local/bin/python3.7 /usr/local/bin/python3 && \ln -s /usr/local/bin/pip3.7 /usr/local/bin/pip3# 配置pip
RUN pip3.7 config set global.index-url https://pypi.doubanio.com/simple# 安装依赖 requirements.txt 是 python服务 需要安装的库。
COPY requirements.txt /app/requirements.txt
RUN pip3.7 install --no-cache-dir -r /app/requirements.txt# 另外,对于python2.X,官方已经不再支持了,就算官网支持,但是还是有一些库pip下载不到的情况,怎么办呢?
# 注意到:在编译的时候,我们把python3.7的库安装在了 /usr/local/lib/python3.7/,如果pip源里找不到,而我们手里有对应版本的库。可以直接把依赖复制到 /usr/local/lib/python3.7/site-packages 目录下即可。
# 例如,yara的库就整理的不太好,我就是直接拿原系统的库整理的。
COPY yara_python-4.2.0-py3.7-linux-x86_64.egg/yara.py /usr/local/lib/python3.7/site-packages/yara.py
COPY yara_python-4.2.0-py3.7-linux-x86_64.egg/yara.cpython-37m-x86_64-linux-gnu.so /usr/local/lib/python3.7/site-packages/yara.cpython-37m-x86_64-linux-gnu.so
COPY yara_python-4.2.0-py3.7-linux-x86_64.egg/libyara.so.9.0.1 /lib/libyara.so.9.0.1
RUN ln -s /lib/libyara.so.9.0.1 /lib/libyara.so.9 && ldconfig# 设置工作目录
WORKDIR /app# 拷贝你的python服务
COPY YOUR_SERVER /app/YOUR_SERVER# 可以创建你需要的目录,运行时可以设置挂载宿主机的目录。
RUN mkdir -p /app/log /data# 启动命令。注意:这里一定不要后台运行。如果转为后台,则会被认为docker已运行完成。
CMD ["python3.7", "YOUR_SERVER/YOUR_SERVER.py"]