更新
This commit is contained in:
+18
-8
@@ -10,7 +10,8 @@ ARG VAR_BASE_IMAGE
|
||||
# 阶段一:builder —— 负责编译依赖
|
||||
# 说明:
|
||||
# - 这一阶段会安装 gcc/make/cmake 等编译工具
|
||||
# - 编译好的 Python 依赖会安装到 /install 前缀
|
||||
# - 编译好的 Python 依赖会安装到 Python 实际 prefix
|
||||
# (即 /usr/local/python3.12.8)
|
||||
# - 最终该阶段整体被丢弃,编译工具不会进入 runtime 镜像
|
||||
# ============================================================
|
||||
FROM ${VAR_BASE_IMAGE} AS builder
|
||||
@@ -72,19 +73,21 @@ WORKDIR /opt/apps
|
||||
COPY ${VAR_PYFILE_PATH}/requirements.txt ./
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# 将依赖安装到 /install 前缀,便于后续整体拷贝到 runtime
|
||||
# --prefix=/install : 依赖会被装到 /install/lib/pythonX.Y/site-packages
|
||||
# 将依赖安装到 Python 实际的 prefix
|
||||
# --prefix=/usr/local/python3.12.8 : 基础镜像中 Python 的安装前缀
|
||||
# 用 python3 -m pip 保证使用同一个 Python 解释器
|
||||
# uwsgi 单独安装(生产环境 WSGI 服务器)
|
||||
# 注意:末尾不要多写反斜杠,否则会把下一行注释拼进来导致语法错误
|
||||
# ------------------------------------------------------------
|
||||
RUN python3 -m pip install --prefix=/usr/local/python3.12.8 -r requirements.txt && \
|
||||
python3 -m pip install --prefix=/usr/local/python3.12.8 uwsgi \
|
||||
python3 -m pip install --prefix=/usr/local/python3.12.8 uwsgi
|
||||
|
||||
# ============================================================
|
||||
# 阶段二:runtime —— 只保留运行时内容
|
||||
# 说明:
|
||||
# - 不再安装 gcc/make/cmake 等编译工具
|
||||
# - 只装运行时需要的动态库
|
||||
# - 从 builder 拷贝编译好的依赖
|
||||
# - 从 builder 拷贝编译好的 Python 及其依赖
|
||||
# ============================================================
|
||||
FROM ${VAR_BASE_IMAGE} AS runtime
|
||||
|
||||
@@ -140,9 +143,9 @@ RUN yum install -y net-tools openssl-devel bzip2-devel libffi-devel mysql-devel
|
||||
yum clean all && rm -rf /var/cache/yum
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# 从 builder 阶段拷贝已编译好的 Python 依赖
|
||||
# /install 下的内容会被合并到 /usr/local
|
||||
# 这样 pip 安装的包就能被 runtime 阶段的 python 找到
|
||||
# 从 builder 阶段拷贝 Python 及其已安装的依赖
|
||||
# 源和目标都使用 Python 的实际 prefix,
|
||||
# 保证 runtime 的 Python 能在自己的 site-packages 里找到 Django 等包
|
||||
# ------------------------------------------------------------
|
||||
COPY --from=builder /usr/local/python3.12.8 /usr/local/python3.12.8
|
||||
|
||||
@@ -164,6 +167,13 @@ COPY ${VAR_PYFILE_PATH}/ ./
|
||||
# ------------------------------------------------------------
|
||||
RUN chown -R esxi:esxi /opt/apps
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# 修正 Python 安装目录属主,保证 esxi 用户可访问
|
||||
# (builder 阶段以 root 安装依赖,属主是 root,
|
||||
# runtime 阶段切换到 esxi 后可能无法写入)
|
||||
# ------------------------------------------------------------
|
||||
RUN chown -R esxi:esxi /usr/local/python3.12.8
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# 切回非 root 用户运行应用(安全加固)
|
||||
# ------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user