更新Dockerfile
This commit is contained in:
+55
-40
@@ -1,60 +1,75 @@
|
|||||||
# 基础镜像地址
|
# ============================================================
|
||||||
|
# 基础镜像参数
|
||||||
|
# ============================================================
|
||||||
ARG VAR_BASE_IMAGE
|
ARG VAR_BASE_IMAGE
|
||||||
|
|
||||||
# 基础镜像
|
# ============================================================
|
||||||
FROM ${VAR_BASE_IMAGE}
|
# 阶段一:builder —— 负责编译依赖
|
||||||
# 镜像作者
|
# ============================================================
|
||||||
LABEL MAINTAINER="djangoadmin@163.com"
|
FROM ${VAR_BASE_IMAGE} AS builder
|
||||||
|
|
||||||
# 设置 python 环境变量
|
LABEL MAINTAINER="djangoadmin@126.com"
|
||||||
ENV PYTHONUNBUFFERED 1
|
|
||||||
ENV PYTHONDONTWRITEBYTECODE 1
|
|
||||||
|
|
||||||
# 环境变量参数
|
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_PROFILES
|
||||||
# 端口参数
|
|
||||||
ARG VAR_PORT
|
ARG VAR_PORT
|
||||||
# 文件参数
|
|
||||||
ARG VAR_PYFILE
|
ARG VAR_PYFILE
|
||||||
# 文件地址
|
|
||||||
ARG VAR_PYFILE_PATH
|
ARG VAR_PYFILE_PATH
|
||||||
|
|
||||||
# 设置端口
|
ENV PORT=${VAR_PORT} \
|
||||||
ENV PORT=${VAR_PORT}
|
PYFILE=${VAR_PYFILE} \
|
||||||
# 设置文件包名
|
PROFILES=${VAR_PROFILES}
|
||||||
ENV PYFILE=${VAR_PYFILE}
|
|
||||||
# 设置环境变量
|
|
||||||
ENV PROFILES=${VAR_PROFILES}
|
|
||||||
|
|
||||||
# 安装必要的软件包
|
# 只安装运行期需要的动态库(不再需要 gcc/make/cmake 等)
|
||||||
RUN yum install -y yum-utils net-tools && \
|
RUN yum install -y net-tools openssl-devel bzip2-devel libffi-devel mysql-devel && \
|
||||||
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
|
# 从 builder 阶段拷贝已编译好的 Python 依赖
|
||||||
RUN pip3 install -U pip
|
COPY --from=builder /install /usr/local
|
||||||
# 设置国内镜像源
|
|
||||||
RUN pip3 config set global.index-url http://mirrors.aliyun.com/pypi/simple
|
|
||||||
RUN pip3 config set install.trusted-host mirrors.aliyun.com
|
|
||||||
# 升级pip版本
|
|
||||||
RUN python3 -m pip install --upgrade pip
|
|
||||||
# 安装工具
|
|
||||||
RUN pip3 install --upgrade setuptools wheel
|
|
||||||
RUN pip3 install ez_setup
|
|
||||||
|
|
||||||
# 创建工作区
|
# 创建工作区
|
||||||
RUN mkdir -p /opt/apps
|
|
||||||
# 设置工作区
|
|
||||||
WORKDIR /opt/apps
|
WORKDIR /opt/apps
|
||||||
|
|
||||||
# 拷贝文件
|
# 拷贝项目源码
|
||||||
COPY ${VAR_PYFILE_PATH} ./
|
COPY ${VAR_PYFILE_PATH}/ ./
|
||||||
|
|
||||||
# 安装依赖
|
|
||||||
RUN pip install -r requirements.txt
|
|
||||||
RUN pip install uwsgi
|
|
||||||
|
|
||||||
# 暴露端口
|
# 暴露端口
|
||||||
EXPOSE ${PORT}
|
EXPOSE ${PORT}
|
||||||
|
|
||||||
# 执行启动项目
|
# 启动
|
||||||
CMD ["sh", "-c", "python3 ${PYFILE}.py runserver 0.0.0.0:${PORT} --noreload"]
|
CMD ["sh", "-c", "python3 ${PYFILE}.py runserver 0.0.0.0:${PORT} --noreload"]
|
||||||
Reference in New Issue
Block a user