linux - Docker 不下载推荐的包

标签 linux docker docker-compose dockerfile

我正在为 Python 应用程序使用 docker。

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 命令。

使用更新命令,它还会下载许多推荐的包并花费很长时间构建。

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

注意:在 Dockerfile 中,apt-get --no-install-recommends update 不起作用;它仍在下载包。

最佳答案

apt-get update 不应安装任何东西。 apt-get update 唯一应该做的就是更新可用包的本地描述。但这并没有下载那些包——它只是下载了更新的描述。这可能需要一段时间。

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

您正在做的是使用 &&\ 将所有这些放入一个单个 docker 命令中。因此,每次您重建您的图像时,您都必须每次都这样做,因为包列表每天都在变化,有时甚至多次变化每天。

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

此外,您可能想要移动 ADD 。/abcRUN 命令之后。您对正在添加的文件(我假设是源代码)所做的任何更改都会使表示已执行的 apt-get 命令的层无效。由于它已失效,因此需要重建。如果您正在积极从事和开发这些项目,那么很容易导致apt-get 每次您构建镜像时执行。

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

关于linux - Docker 不下载推荐的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57207935/

相关文章:

django - Django 在带有 nginx 的 docker 上未使用静态文件

java - 更新 docker-container jre 时区

linux - Bash 脚本和 cron 异常

linux - 配置 knotify 以执行自定义命令

linux - 如何排队工作

c - 在较新版本的 glibc ( 2.3 -> 2.10 ) 上编译时出现段错误

node.js - 在Windows上使用nodejs在docker中挂载卷

python - 如何在一个目录中为一个项目创建多个 docker 镜像?

c# - Active Directory Docker - Windows 身份验证模式

docker - 映射卷以包含 docker-compose 中的子文件夹