加速“apt-get update”以加速 Docker 镜像构建

And*_*rew 5 apt docker

我想添加curl到 Docker 映像,并且我在 Dockerfile 中使用以下命令来执行此操作:

RUN apt-get update
RUN apt-get install curl ca-certificates -y
Run Code Online (Sandbox Code Playgroud)

我的问题是初始更新需要相当长的时间才能运行(2 分钟),因此当我调试 Dockerfile 时,迭代速度很慢。特别是当我在 之前进行更改时RUN apt-get update,这会使 Docker 的图像缓存失效。

有没有什么方法可以更有选择性apt-get update,因此它只更新足以索引下载位置curl?或者我可以使用其他一些技术来加速我的 Docker 构建?

这是整个 Dockerfile,

FROM postgres:9.6.10
ADD data/tsvs.tar.gz /standard_data
COPY postgres/*.sql /docker-entrypoint-initdb.d/

RUN apt-get update
RUN apt-get install curl ca-certificates -y
RUN curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
RUN apt-get install postgis postgresql-9.6-postgis-scripts -y
Run Code Online (Sandbox Code Playgroud)

我目前正在对 postgres/*.sql 中的 SQL 文件进行更改,因此缓存失效。

Mih*_*hai 2

图像按层组织,每一层都依赖于前一层。图层也会被缓存以提高速度。

当您再次运行构建时,请务必检查 dockerfile 中命令行的 ch ckecksum 是否发生更改。如果没有,则会从缓存中提取该图层。但如果这样做了,它就会重建后面的层和所有连续的层。

在您的特定情况下,每次进行更改时,ADD 命令都会生成一个新层,并触发所有连续层的重建。

在解决此问题之前,请先移动安装。

您还应该将所有安装放在 1 行上,并在完成后清理 apt 缓存。

RUN apt-get install curl ca-certificates -y && \
  curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \
  apt-get install postgis postgresql-9.6-postgis-scripts -y && \
  rm -rf /var/cache/apt && \
  apt-get clean
Run Code Online (Sandbox Code Playgroud)