我想添加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 文件进行更改,因此缓存失效。
图像按层组织,每一层都依赖于前一层。图层也会被缓存以提高速度。
当您再次运行构建时,请务必检查 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)
| 归档时间: |
|
| 查看次数: |
12926 次 |
| 最近记录: |