簡體   English   中英

將Python包安裝到docker鏡像的不同方式

[英]Different ways of installing Python packages to docker image

我想基於已安裝一些 Python 包的現有鏡像創建一個 Docker 鏡像。 所以我正在考慮在 Dockerfile 中使用pip來為圖像安裝額外的包。 看起來我可以單獨安裝它們,例如:

RUN pip install foo==1.2.*
RUN pip install bar==3.4.*
...

或者將它們放在requirements.txt中並執行如下操作:

COPY requirements.txt /opt/app/requirements.txt
WORKDIR /opt/app
RUN pip install -r requirements.txt

我想知道哪種方式被認為是更好的做法(即性能更高和/或導致圖像更小)。

我需要一種更快並導致更小圖像尺寸的方法

使用高山和多階段構建。 例子:

FROM python:3.7-alpine as base
FROM base as builder
RUN mkdir /install
WORKDIR /install
COPY requirements.txt /requirements.txt
RUN pip install --install-option="--prefix=/install" -r /requirements.txt
FROM base
COPY --from=builder /install /usr/local
COPY src /app
WORKDIR /app
CMD ["gunicorn", "-w 4", "main:app"]

來源: https ://blog.realkinetic.com/building-minimal-docker-containers-for-python-applications-37d0272c52f3

這是一個復雜的問題,兩種選擇都有其優點和缺點。 讓我們根據計算資源、依賴鏈、用戶友好性等來擴展方法。

方法一:在requirements.txt中添加包

  • 以這種方式包含包是更清潔和有保證的方法。
  • 添加包后,需要重新構建鏡像並啟動容器,耗費大量時間和處理資源。
  • 它使版本控制機制更加健壯。

方法二:在部署好的容器上使用pip

  • 這種方法更簡單,更容易。
  • 使用 pip 直接安裝在已部署的容器上,將始終獲取其依賴項以與它一起安裝。
  • 由於版本不匹配或包本身與其他包沖突,這些依賴包有時可能會與現有包沖突。
  • 有時您可能會忘記從工作容器構建 docker 鏡像。

結論

  • 這兩種方法之間的大小不會有太大變化。
  • 如果你正在嘗試不同的包,那么使用方法 2,它將節省時間和資源。
  • 如果確定,您可以添加要求並開始工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM