Docker不下载推荐的软件包

时间:2019-07-25 18:10:26

标签: linux docker docker-compose dockerfile

我正在将docker用于Python应用程序。

FROM python:3.5-slim
WORKDIR /abc
ADD . /abc
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        curl \
        gcc \
        python3-dev \
        musl-dev \ 
    && \
    pip install -r requirements.txt &&\
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* &&\
    apt-get purge -y --auto-remove gcc

因此,每当我运行docker build命令时,它都会首先在此处运行apt-get update命令。

使用update命令,它还会下载许多推荐的软件包,并花费很长时间。

如何阻止Ubuntu安装推荐的软件包并更快地构建Docker?

注意:在Dockerfile中,apt-get --no-install-recommends update无法正常工作;它仍在下载软件包。

1 个答案:

答案 0 :(得分:2)

apt-get update不应安装任何内容。 apt-get update唯一要做的就是更新可用软件包的本地描述。但这并不会下载那些软件包,而只是下载更新的描述。这可能需要一段时间。

apt-get install当然会安装软件包。为了安装这些软件包,它需要下载它们。使用--no-install-recommends告诉apt-get不要安装“推荐软件包”。例如,如果您安装vim,则有很多插件也被推荐并作为单独的软件包提供。使用该开关,将不会安装这些vim插件。当然,安装所选的软件包也可能需要一段时间。

您正在使用&& \将所有内容放入单个泊坞窗命令中。因此,每次重建图像时,您都必须每次执行一次,因为软件包列表每天 都会更改,有时甚至多次每天。

在运行pip install -r requirements.txt之后,尝试将RUN移至其自己的apt-get命令。如果那可以满足您的要求,那么我建议您阅读和学习更多有关Docker幕后工作方式的信息。特别是,重要的是要了解每个命令如何添加一个新层,以及单个层中的任何动态信息如何导致较长的构建时间,因为该层会随着大量更改而频繁更改。

此外,您可能希望将ADD . /abc移动到RUN命令之后。您对要添加的文件(我认为是源代码)所做的任何更改都会使代表已执行的apt-get命令的层无效。由于已失效,因此需要对其进行重建。如果您正在积极地从事和开发这些项目,那么很容易导致apt-get每次被执行

您可以搜索大量资源,讨论使用Docker时如何优化时间。我不会推荐任何特定的,并将其留给您学习。