我想将curl添加到Docker映像中,并使用以下命令在Dockerfile中这样做:
RUN apt-get update
RUN apt-get install curl ca-certificates -y我的问题是,初始更新需要很长时间才能运行(2分钟),所以在调试Dockerfile时,迭代速度很慢。特别是当我在RUN apt-get update之前进行更改时,这会使Docker的图像缓存失效。
是否有任何方法可以对apt-get update进行更有选择性的选择,因此它只更新到可以下载curl的地方?或者其他一些我可以用来加速码头建设的技术?
这是整个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我目前正在修改postgres/*.sql中的SQL文件,因此缓存失效。
发布于 2019-05-15 03:32:06
图像是按层组织的,每一层都取决于前面的层。层也是为了速度而缓存的。
再次运行构建时,请继续检查dockerfile中命令行的ckecksum是否发生了更改。如果没有,则会从缓存中提取该层。但是如果是这样的话,它就会重建后一层和所有连续的层。
在特定情况下,ADD命令在每次更改时生成一个新层,这将触发所有要重建的连续层。
在修复此问题之前移动安装。
您还应该将所有安装放在一行上,并在完成后清除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发布于 2019-05-15 00:02:18
如果我将curl安装的内容移到我要更改的部件之前,缓存将更频繁地被击中。我的新文件是
FROM postgres:9.6.10
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
ADD data/tsvs.tar.gz /standard_data
COPY postgres/*.sql /docker-entrypoint-initdb.d/
COPY postgres/subsetting.s* /docker-entrypoint-initdb.d/感谢卡莱布·H.用他的评论来思考这个问题。
发布于 2021-04-14 03:37:51
这篇文章在reddit上建议,使用COPY sources.list /etc/apt/将本地apt sources.list复制到容器中可能有助于容器的apt update使用本地镜像,从而加快速度
https://stackoverflow.com/questions/56139706
复制相似问题