如何解决我是否需要在我的Python Dockerfile中进行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时运行。
解决方法
像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 image page上列出的内容。如果您要强制使用特定的补丁程序级别(python:3.8.4
),则存在一定风险,因为一旦发布了较新的上游版本,这些映像就会停止获取更新。
如果需要安装任何操作系统级别的软件包,则需要运行apt-get update
,并且出于Docker层缓存的原因,您应使用与相应{{1 }}
RUN
,
查看docker best pratices,您应该进行更新而不是升级,因为这需要您的容器以特权权限运行。进行更新时,请确保您正在安装要安装的软件包的最新版本。考虑到这一点,基础映像的提供者负责选择基础中使用的软件包的版本(或更新为最新版本),而您负责所需的软件包。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。