直接回答:先用 python:3.8 这类完整镜像编译和下载依赖,再把结果复制到 python:3.8-slim 里运行,这就是多阶段构建,能让 Python 镜像从 1G 降到几百兆。
Python是一个非常大的基础图像,所以直接用python打包会造成镜像很大。
如果您使用python:3.8镜像是因为您需要一些包来编译您的依赖项,那么您可以利用多阶段构建的优势,并使用python:3.8编译/下载依赖项,但使用更轻量级的python:3.8-slim为您的应用程序提供服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| FROM python:3.8 as build
WORKDIR /usr/app RUN python -m venv /usr/app/venv ENV PATH="/usr/app/venv/bin:$PATH"
COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt && rm requirements.txt
FROM python:3.8-slim RUN groupadd -g 999 python && \ useradd -r -u 999 python -g python RUN mkdir /usr/app && chown python:python /usr/app WORKDIR /usr/app
COPY --chown=python:python --from=build /usr/app/venv ./venv COPY --chown=python:python . .
USER 999
ENV PATH="/usr/app/venv/bin:$PATH"
EXPOSE 8088 ENTRYPOINT [ "python", "main.py"]
|
这篇笔记整理自我自己的实践记录,如果做法有出入,或者你踩过别的坑,欢迎到留言板一起聊聊。