如何使用pipenv为python应用制作轻量级的docker映像

问题描述 投票:2回答:1

我可以使用以下简单的Dockerfile为我的python应用程序生成工作图像:

FROM python:3.7
WORKDIR /myapp
COPY Pipfile* ./
RUN pip install pipenv
RUN pipenv install --system --deploy
COPY src .
CMD ["python3", "app.py"]

但是,它将产生约1 GB的映像,其中可能包含临时文件,并且部署繁重。而且我只需要完整的python图像即可构建。我的应用程序可以在高山版本上成功运行,因此我可以进行两次通过Dockerfile

FROM python:3.7 as builder
COPY Pipfile* ./
RUN pipenv lock --requirements > requirements.txt
RUN python3 -m venv /venv
RUN /venv/bin/pip install --upgrade pip
RUN /venv/bin/pip install -r requirements.txt

FROM python:3.7-alpine
COPY --from=builder /venv /venv
WORKDIR /myapp
COPY src .
CMD ["/venv/bin/python3", "app.py"]

到目前为止,效果还不错,比原来小6倍。但是该方案被认为是一些“存根”,具有一些缺点:

  • 具有不必要的额外COPY --from=builder步骤
  • [它不使用pipenv,但也需要pip进行安装(+1额外的步骤,pipenv lock + pip install总是比pipenv install慢)
  • 它不会在系统范围内安装,但会安装在/venv中,应避免在容器内部安装
  • 次要:构建会对中间图像缓存造成更多污染,并且需要下载两个图像变体。。

如何结合这两种方法,以缺乏pipenv的缺点获得基于阿尔卑斯山的轻型图像,]?>

或者您能否提供生产Dockerfile的想法?

我可以使用以下简单的Dockerfile为我的python应用程序生成工作映像:FROM python:3.7 WORKDIR / myapp COPY Pipfile * ./ RUN pip install pipenv RUN pipenv install --system --deploy COPY src。 ...

python docker dockerfile alpine pipenv
1个回答
3
投票

怎么样,

© www.soinside.com 2019 - 2024. All rights reserved.