加速“ apt-get更新”以加速Docker映像构建

时间:2019-05-14 23:01:49

标签: docker apt

我想将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的位置?还是其他我可以用来加快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

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

3 个答案:

答案 0 :(得分:1)

图像是按层组织的,每个层取决于后面的内容。图层也可以高速缓存。

再次运行构建时,请继续检查dockerfile中命令行的chcksum和是否已更改。如果没有,则将其从缓存中拉出。但是,如果这样做,它将重建以后的所有层。

在特定情况下,每次进行更改时,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

答案 1 :(得分:0)

如果将 int currentScore; final int earnedScore; @override Widget build(BuildContext context) { updateScore(); setScore(); return.... } Future<int> getScore() async { SharedPreferences prefs = await SharedPreferences.getInstance(); return prefs.getInt(widget.keyNameScore); } Future<void> saveScore(int score) async{ SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setInt(widget.keyNameScore, score); } void updateScore() async{ getScore().then((value){ currentScore = value; currentScore = currentScore + earnedScore; saveScore(currentScore); }); } void setScore(){ getScore().then((value){ setState(() { currentScore = value; }); }); } 安装内容移到我要更改的部分之前,则缓存命中率会更高。我的新文件是

curl

h / t致Caleb H.的评论中考虑了这一点。

答案 2 :(得分:0)

This post on reddit 建议使用 sources.list 将本地 apt COPY sources.list /etc/apt/ 复制到容器可能有助于容器的 apt update 使用本地镜像,这可能会加快速度