Docker制作python环境

发布于:2025-07-07 ⋅ 阅读:(19) ⋅ 点赞:(0)

原文地址: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"]

网站公告

今日签到

点亮在社区的每一天
去签到