直接回答:先用 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"]

这篇笔记整理自我自己的实践记录,如果做法有出入,或者你踩过别的坑,欢迎到留言板一起聊聊。

站内搜索

没有找到内容!