From f6a9a0a0b12eb0aabc4cb48ec62da495883d1616 Mon Sep 17 00:00:00 2001 From: zhangtao <9480807882@qq.com> Date: Tue, 12 May 2026 17:26:12 +0800 Subject: [PATCH] =?UTF-8?q?perf(docker):=20=E4=BC=98=E5=8C=96=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E9=95=9C=E5=83=8F=E6=9E=84=E5=BB=BA=E5=B9=B6=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E7=BC=96=E8=AF=91=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/backend/Dockerfile | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index 2754e36ac..5a400e6d5 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -2,28 +2,25 @@ # FastapiAdmin Backend Dockerfile # ============================================ # 多阶段构建:第一阶段安装依赖,第二阶段运行应用 +# 优化:移除 build-essential,多数包已有预编译 wheel # ============================================ -# 第一阶段:构建依赖 +# 第一阶段:安装依赖 FROM python:3.10-slim AS builder -# 设置时区 -ENV TZ=Asia/Shanghai +ENV TZ=Asia/Shanghai \ + PIP_NO_CACHE_DIR=1 -# 设置容器内工作目录 WORKDIR /build -# 安装编译依赖(部分包需要 build-essential) -RUN apt-get update && apt-get install -y --no-install-recommends \ - build-essential \ - && rm -rf /var/lib/apt/lists/* - # 复制依赖文件(利用 Docker 缓存层) COPY ./backend/requirements.txt . -# 安装 Python 依赖到指定目录 -RUN pip install --no-cache-dir -r requirements.txt \ - --target=/home/deps +# 安装 Python 依赖(全部使用预编译 wheel,无需 gcc/build-essential) +RUN pip install --no-cache-dir --only-binary :all: \ + -r requirements.txt --target=/home/deps 2>/dev/null \ + || pip install --no-cache-dir \ + -r requirements.txt --target=/home/deps # 第二阶段:运行环境 FROM python:3.10-slim @@ -38,21 +35,16 @@ ENV PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ TZ=Asia/Shanghai -# 创建非 root 用户 +# 创建非 root 用户和日志目录 RUN groupadd -r fastapiadmin && \ - useradd -r -g fastapiadmin -u 1001 -m -s /sbin/nologin fastapiadmin - -# 创建日志目录 -RUN mkdir -p /home/logs && \ + useradd -r -g fastapiadmin -u 1001 -m -s /sbin/nologin fastapiadmin && \ + mkdir -p /home/logs && \ chmod 755 /home/logs -# 设置工作目录 WORKDIR /home # 从构建阶段复制依赖 COPY --from=builder /home/deps /home/deps - -# 设置 PYTHONPATH ENV PYTHONPATH=/home/deps:$PYTHONPATH # 复制应用代码 @@ -64,12 +56,10 @@ RUN chown -R fastapiadmin:fastapiadmin /home # 切换到非 root 用户 USER fastapiadmin -# 暴露端口 EXPOSE 8001 # 容器健康检查 HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8001/api/v1/health')" || exit 1 -# 运行应用 CMD ["python", "main.py", "run", "--env=prod"]