75 lines
2.2 KiB
Docker
75 lines
2.2 KiB
Docker
# ============================================================
|
|
# 基础镜像参数
|
|
# ============================================================
|
|
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"] |