【问题标题】:Rebuilding Docker image taking time重建 Docker 镜像需要时间
【发布时间】:2021-09-20 19:13:01
【问题描述】:

Dockerfile有如下内容,

FROM node:16.4.2-alpine3.14

WORKDIR /app

COPY package.json .

COPY . /app

并运行以下构建命令

docker build -t app:0.1 .

花了 28.4 秒,下面是终端日志,

[+] 建筑 28.4 秒 (10/10) 完成 => [internal] 从 Dockerfile 0.1s 加载构建定义 => => 传输 dockerfile: 124B 0.0s => [内部] 加载 .dockerignore 0.1s => => 传输上下文:53B 0.0s => [内部] 为 docker.io/library/node:16.4.2-alpine3.14 17.1s 加载元数据 => [auth] library/node:pull token for registry-1.docker.io 0.0s => [内部] 加载构建上下文 0.1s => => 传输上下文:2.01MB 0.0s => [1/4] FROM docker.io/library/node:16.4.2-alpine3.14@sha256:fabfca5e7dcb339097f998d6ef11c53dd80a3f99ed5cecc005e93d0ff6d4bda9 9.9s => => 解决 docker.io/library/node:16.4.2-alpine3.14@sha256:fabfca5e7dcb339097f998d6ef11c53dd80a3f99ed5cecc005e93d0ff6d4bda9 0.0s => => sha256:fabfca5e7dcb339097f998d6ef11c53dd80a3f99ed5cecc005e93d0ff6d4bda9 1.00kB / 1.00kB 0.0s => => sha256:75dec02064547a8ec570f2953e8d68a1674ad3f37730160f1570cce077be9ed0 1.16kB / 1.16kB 0.0s => => sha256:40cb916373b08a087466d2e72402d0b3a4587fd3e9135169498cf0db4ff42a88 6.53kB / 6.53kB 0.0s => => sha256:5843afab387455b37944e709ee8c78d7520df80f8d01cf7f861aae63beeddb6b 2.81MB / 2.81MB 0.8s => => sha256:c118dce16b0057d713fc98e31606a84e4348fa2c967eaf1bb5fd21ba42825956 35.55MB / 35.55MB 7.1s => => sha256:aef8e8137ac43c8199343c96874993063af6584260f22b15e99f735cce5de653 2.35MB / 2.35MB 2.6s => => 提取 sha256:5843afab387455b37944e709ee8c78d7520df80f8d01cf7f861aae63beeddb6b 0.2s => => sha256:ad336e0e52b8dfc38c23599663deb060b1ac169d548dec8072ead94712f708be 281B / 281B 2.0s => => 提取sha256:c118dce16b0057d713fc98e31606a84e4348fa2c967eaf1bb5fd21ba42825956 2.0s => => 提取 sha256:aef8e8137ac43c8199343c96874993063af6584260f22b15e99f735cce5de653 0.2s => => 提取 sha256:ad336e0e52b8dfc38c23599663deb060b1ac169d548dec8072ead94712f708be 0.0s => [2/4] WORKDIR /app 0.6s => [3/4] 复制 package.json 。 0.1s => [4/4] 复制。 /app 0.1s => 导出到图像 0.2s => => 导出图层 0.2s => => 写入图像 sha256:91d93eddff55cba6bd8b72144b7320e025de93e9865177ff584c75b94d1bafc1 0.0s => => 命名为 docker.io/library/app:0.1

当我再次运行相同的构建命令时,需要 14.6 秒

但是,如果我使用 node:16.4.2-alpine3.14 拉动,

 docker pull node:16.4.2-alpine3.14

然后运行 ​​build 命令,那么 build 只需要 0.3 秒

我认为,当我们构建映像时,依赖项也会被下载,这就是为什么所需时间从 28.4 秒减少到 14.6 秒的原因。但为什么甚至 14.6 秒?它应该少于 0.3 秒。

为什么会这样?我错过了什么?

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    以下可能是需要 18.4 秒的原因:

    1. Docker 客户端将整个 构建上下文 带到 docker 守护进程。构建上下文是整个目录,Dockerfile。一些文件或文件夹可能会占用大量空间,例如 node_modules。对此的补救措施是将不需要的文件(例如 .git、node_module、日志文件)添加到 .dockerignore 文件中,以使 Docker 忽略某些文件。
    2. DNS 解析。使用dig 命令检查解析 docker 注册表需要多长时间。
    3. 为您的构建启用 buildkit 将有助于缩短构建时间。调用docker build命令时设置DOCKER_BUILDKIT=1环境变量如:

    DOCKER_BUILDKIT=1 docker build .

    请看这个link for more information

    【讨论】:

    • 我从终端得到的最耗时的部分,``` #3 [internal] load metadata for docker.io/library/node:16.4.2-alpine3.14 ``` 差不多每时每刻。我认为这是我正在使用的 WSL 的问题。我在 VM 上分离了一个新的 ubuntu 实例,它现在工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2019-08-03
    相关资源
    最近更新 更多