[英]Install python-pip using apt-get via Ubuntu's apt-get in Dockerfile
[英]Do I need apt-get update and upgrade in my Python Dockerfile
我的生產 Django 應用程序有一個非常簡約的Dockerfile
:
FROM python:3.8
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN apt-get update &&
apt-get -y upgrade
WORKDIR /app
COPY requirements.txt ./
RUN pip install --upgrade pip && \
pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD [ "gunicorn", "api.wsgi:application", "--bind=0.0.0.0" ]
我需要運行apt-get update && apt-get -y upgrade
嗎? 根據我的理解,這兩個命令 (1) 下載可用軟件包的最新列表和 (2) 升級已安裝的軟件包。 為什么官方的python docker鏡像還沒有這樣做?
如果我不需要在這個極簡的 Dockerfile 中運行它們,我什么時候需要運行它們? 我注意到它們通常在安裝其他軟件包時運行。
像ubuntu:18.04
這樣的基礎 Docker Hub Linux 發行版鏡像實際上會定期更新自己:如果你docker pull ubuntu:18.04
,等一個星期,然后重復它,你會得到一個更新的鏡像。 你有點依賴中間圖像,比如python:3.8
,做同樣的事情。
在 Dockerfile 中運行apt-get update
和類似的“升級所有”命令是不尋常的,但並非聞所未聞; 更常見的是假設基礎鏡像已經是最新的,或者有特定的出處要求並在基礎分發鏡像之上從頭開始構建所有內容。
如果您使用的是主要版本或次要版本映像標簽( python:3
、 python:3.8
、 python:3.8-buster
),您可能沒問題,只要您確保將基本映像更新為列出的內容定期在Docker Hub 圖像頁面上。 如果您強制使用特定的補丁級別 ( python:3.8.4
),您將面臨一些風險,因為一旦發布了較新的上游版本,這些映像就會停止獲取更新。
如果您需要安裝任何操作系統級別的軟件包,則確實需要運行apt-get update
,並且出於 Docker 層緩存的原因,您應該在與相應的apt-get install
相同的RUN
命令中執行此操作
# Doesn't usually have an "upgrade"
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get install --no-install-recommends --assume-yes \
a-package \
another-package \
more-packages
查看 docker best practics ,您應該進行更新但不要升級,因為這需要您的容器以特權權限運行。 進行更新確保您正在安裝要安裝的軟件包的最新版本。 考慮到這一點,基礎鏡像的提供者負責選擇基礎內部使用的包版本(或更新到最新版本),而您負責所需的版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.