diff --git a/Dockerfile b/Dockerfile index 9b14ebecdce54ccdf25e03f5976179e23eb2391e..ba4edb70e0e76484b162a29db8307676f805e282 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,40 @@ -FROM python:3.11 +# --------------------- 构建阶段 --------------------- +FROM python:3.11 AS builder + ENV PYTHONUNBUFFERED 1 +WORKDIR /app + +# 安装构建依赖。 +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + default-libmysqlclient-dev \ + gettext \ + && rm -rf /var/lib/apt/lists/* + +# 复制依赖文件并安装(使用 --user 将包安装到用户目录,用于后期复制到运行时阶段镜像。) +COPY requirements.txt . +# 修改pip源为中科大开源镜像站源,以提高拉取速度。 +RUN pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/simple && \ + pip install --user --no-cache-dir -r requirements.txt gunicorn[gevent] + +# --------------------- 运行时阶段 --------------------- +# 使用精简镜像,减小运行时阶段镜像大小。 +FROM python:3.11-slim WORKDIR /code/djangoblog/ -RUN apt-get update && \ - apt-get install default-libmysqlclient-dev gettext -y && \ - rm -rf /var/lib/apt/lists/* -ADD requirements.txt requirements.txt -RUN pip install --upgrade pip && \ - pip install --no-cache-dir -r requirements.txt && \ - pip install --no-cache-dir gunicorn[gevent] && \ - pip cache purge - -ADD . . -RUN chmod +x /code/djangoblog/bin/docker_start.sh -ENTRYPOINT ["/code/djangoblog/bin/docker_start.sh"] + +# 安装运行时系统依赖。 +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + # 用mysql-client替换default-libmysqlclient-dev,减小运行时阶段镜像大小。 + default-mysql-client \ + gettext \ + && rm -rf /var/lib/apt/lists/* + +# 从构建阶段复制已安装的 Python 包。 +COPY --from=builder /root/.local /usr/local +# 复制项目代码 +COPY . . + +# 设置启动脚本权限 +RUN chmod +x /code/djangoblog/bin/pithy_start.sh +ENTRYPOINT ["/code/djangoblog/bin/pithy_start.sh"] \ No newline at end of file