我是否需要在我的Python Dockerfile中进行apt-get更新和升级

时间:2020-09-14 21:45:50

标签: python linux docker apt-get

我的生产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中运行它们,什么时候需要运行它们?我注意到它们通常在installing other packages时运行。

2 个答案:

答案 0 :(得分:1)

ubuntu:18.04这样的基本Docker Hub Linux分发映像实际上会定期定期更新:如果您docker pull ubuntu:18.04,请等待一周,然后重复一次,您将获得更新的映像。您在某种程度上依赖中间图像(例如python:3.8)来完成相同的工作。

在Dockerfile中运行apt-get update和类似的“升级一切”命令是不寻常的,但并非闻所未闻;更常见的是要么假设基础映像已经是最新的,要么具有特定的出处要求,然后在基础分发映像的基础上从头开始构建所有内容。

如果您使用的是主要版本或次要版本的图像标签(python:3python:3.8python:3.8-buster),就可以了,只要您确保定期将您的基本图片更新为Docker Hub image page上列出的内容。如果您要强制使用特定的补丁程序级别(python:3.8.4),则存在一定风险,因为一旦发布了较新的上游版本,这些映像就会停止获取更新。

如果需要安装任何操作系统级别的软件包,则需要运行apt-get update,并且出于Docker层缓存的原因,您应使用与相应{{1 }}

RUN

答案 1 :(得分:0)

查看docker best pratices,您应该进行更新而不是升级,因为这需要您的容器以特权权限运行。进行更新时,请确保您正在安装要安装的软件包的最新版本。考虑到这一点,基础映像的提供者负责选择基础中使用的软件包的版本(或更新为最新版本),而您负责所需的软件包。

相关问题