# ============================================================ # 基础镜像参数 # ============================================================ ARG VAR_BASE_IMAGE # ============================================================ # 阶段一:builder —— 负责编译依赖 # ============================================================ FROM ${VAR_BASE_IMAGE} AS builder LABEL MAINTAINER="djangoadmin@126.com" ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PIP_NO_CACHE_DIR=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 # 安装编译所需工具链 RUN yum install -y yum-utils net-tools && \ yum install -y gcc gcc-c++ make cmake \ openssl-devel bzip2-devel libffi-devel mysql-devel && \ yum clean all && rm -rf /var/cache/yum # 配置 pip 国内镜像源 RUN pip3 config set global.index-url http://mirrors.aliyun.com/pypi/simple && \ pip3 config set install.trusted-host mirrors.aliyun.com && \ python3 -m pip install --upgrade pip setuptools wheel # 拷贝依赖清单 ARG VAR_PYFILE_PATH WORKDIR /opt/apps COPY ${VAR_PYFILE_PATH}/requirements.txt ./ # 将依赖安装到 /install 前缀,便于后续拷贝 RUN pip3 install --prefix=/install -r requirements.txt && \ pip3 install --prefix=/install uwsgi # ============================================================ # 阶段二:runtime —— 只保留运行时内容 # ============================================================ FROM ${VAR_BASE_IMAGE} AS runtime LABEL MAINTAINER="djangoadmin@126.com" ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 # 运行期参数 ARG VAR_PROFILES ARG VAR_PORT ARG VAR_PYFILE ARG VAR_PYFILE_PATH ENV PORT=${VAR_PORT} \ PYFILE=${VAR_PYFILE} \ PROFILES=${VAR_PROFILES} # 只安装运行期需要的动态库(不再需要 gcc/make/cmake 等) RUN yum install -y net-tools openssl-devel bzip2-devel libffi-devel mysql-devel && \ yum clean all && rm -rf /var/cache/yum # 从 builder 阶段拷贝已编译好的 Python 依赖 COPY --from=builder /install /usr/local # 创建工作区 WORKDIR /opt/apps # 拷贝项目源码 COPY ${VAR_PYFILE_PATH}/ ./ # 暴露端口 EXPOSE ${PORT} # 启动 CMD ["sh", "-c", "python3 ${PYFILE}.py runserver 0.0.0.0:${PORT} --noreload"]