我正在将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
无法正常工作;它仍在下载软件包。
答案 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时如何优化时间。我不会推荐任何特定的,并将其留给您学习。