Question: Buildkit Cache versus Docker Desktop Cache.
I've been working to wrap my head around BuildKit caching options, and comparing them to the familiar (Docker Desktop). Observationally it appears there's some differences that I'm trying to understand.
Setup:
- I've cleared out my Docker Desktop cache using
docker system prune. - For Buildkit I'm using a locally hosted Docker registry within a Kubernetes cluster for my cache.
- I'm using
moby/buildkit:master-rootlesscontainer image for buildkit. - I'm using
moby/buildkit:masterfor buildctl. - For BuildKit Cache export I'm using argument
--export-cache type=registry,mode=max,ref=docker-registry.caching.svc.cluster.local:5000/${repositoryName}:buildcache - For BuildKit Cache import I'm using argument
--import-cache type=registry,ref=docker-registry.caching.svc.cluster.local:5000/${repositoryName}:buildcache
Without Cache Populated
Using Dockerfile:
FROM node:16
RUN mkdir /app
WORKDIR /app
RUN npm install express yaml
With Docker Desktop:
[+] Building 4.9s (8/8) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 114B 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/node:16 0.0s
=> [1/4] FROM docker.io/library/node:16 0.0s
=> [2/4] RUN mkdir /app 0.4s
=> [3/4] WORKDIR /app 0.0s
=> [4/4] RUN npm install express yaml 4.1s
=> exporting to image 0.2s
=> => exporting layers 0.2s
=> => writing image sha256:6c8baa8c73d7cfcfa3e976d1af4dc65327e589fa04367a5b1432e09819ce8689
With BuildCtl:
#1 [internal] load .dockerignore
#1 transferring context: 2B done
#1 DONE 0.0s
#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 478B done
#2 DONE 0.0s
#3 [internal] load metadata for docker.io/library/node:16
#3 DONE 0.3s
#4 importing cache manifest from docker-registry.caching.svc.cluster.local:5000/centos:buildcache
#4 ERROR: docker-registry.caching.svc.cluster.local:5000/centos:buildcache: not found
#5 [1/4] FROM docker.io/library/node:16@sha256:1ed1e17ccabb09038cfb8a965337ebcda51ef9e9d32082164c502d44d9731a02
#5 resolve docker.io/library/node:16@sha256:1ed1e17ccabb09038cfb8a965337ebcda51ef9e9d32082164c502d44d9731a02 0.0s done
#5 sha256:92cdf774b8834b61a047f6be5942c23659eea9df42523b7da5184aecfb9e4f20 451B / 451B 0.0s done
#5 sha256:4ed42ef80d39f33716b3a9f0596533074d8370da8fbccb85a88dc50ec6432f44 4.20kB / 4.20kB 0.0s done
#5 sha256:986a235ce43f98d4f2106f9e64a9456f0034448d7f81074796416db134a2b812 2.29MB / 2.29MB 0.1s done
#5 sha256:bebe51b791bc86d404fb655a06cbae27bb6e6d594488bf74620be25b1dedc4df 6.29MB / 34.09MB 0.2s
#5 sha256:bebe51b791bc86d404fb655a06cbae27bb6e6d594488bf74620be25b1dedc4df 27.26MB / 34.09MB 0.3s
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 4.19MB / 192.50MB 0.2s
#5 sha256:cc915d298757b72963f0d061cc16ca4925e9f4481446b87a5297b4043ffc8033 10.00MB / 10.00MB 0.1s done
#5 sha256:f08b88f29371de7c9ac165381b7426349760f6af3f205e8716426fafce4a1ff2 12.58MB / 51.84MB 0.2s
#5 sha256:bebe51b791bc86d404fb655a06cbae27bb6e6d594488bf74620be25b1dedc4df 34.09MB / 34.09MB 0.4s done
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 28.31MB / 192.50MB 0.3s
#5 sha256:f08b88f29371de7c9ac165381b7426349760f6af3f205e8716426fafce4a1ff2 28.31MB / 51.84MB 0.3s
#5 sha256:7e6a53d1988fa8e19db6bcfc96ee6783afb079c38dbe047528e691815d19a9fa 13.63MB / 50.44MB 0.2s
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 42.99MB / 192.50MB 0.5s
#5 sha256:f08b88f29371de7c9ac165381b7426349760f6af3f205e8716426fafce4a1ff2 42.99MB / 51.84MB 0.5s
#5 sha256:7e6a53d1988fa8e19db6bcfc96ee6783afb079c38dbe047528e691815d19a9fa 28.31MB / 50.44MB 0.3s
#5 sha256:4fe4e1c58b4af82939a918665dd1e7b5b636dd73c710b4bccb530edbb15470d2 7.86MB / 7.86MB 0.1s done
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 58.72MB / 192.50MB 0.6s
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 73.40MB / 192.50MB 0.8s
#5 sha256:f08b88f29371de7c9ac165381b7426349760f6af3f205e8716426fafce4a1ff2 51.84MB / 51.84MB 0.6s done
#5 sha256:7e6a53d1988fa8e19db6bcfc96ee6783afb079c38dbe047528e691815d19a9fa 44.04MB / 50.44MB 0.5s
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 88.08MB / 192.50MB 0.9s
#5 sha256:7e6a53d1988fa8e19db6bcfc96ee6783afb079c38dbe047528e691815d19a9fa 50.44MB / 50.44MB 0.6s done
#5 extracting sha256:7e6a53d1988fa8e19db6bcfc96ee6783afb079c38dbe047528e691815d19a9fa
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 103.81MB / 192.50MB 1.1s
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 118.49MB / 192.50MB 1.2s
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 133.17MB / 192.50MB 1.4s
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 148.90MB / 192.50MB 1.5s
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 163.58MB / 192.50MB 1.7s
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 178.26MB / 192.50MB 1.8s
#5 extracting sha256:7e6a53d1988fa8e19db6bcfc96ee6783afb079c38dbe047528e691815d19a9fa 1.1s done
#5 extracting sha256:4fe4e1c58b4af82939a918665dd1e7b5b636dd73c710b4bccb530edbb15470d2
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 192.50MB / 192.50MB 2.1s
#5 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 192.50MB / 192.50MB 2.4s done
#5 extracting sha256:4fe4e1c58b4af82939a918665dd1e7b5b636dd73c710b4bccb530edbb15470d2 0.7s done
#5 extracting sha256:cc915d298757b72963f0d061cc16ca4925e9f4481446b87a5297b4043ffc8033
#5 extracting sha256:cc915d298757b72963f0d061cc16ca4925e9f4481446b87a5297b4043ffc8033 0.5s done
#5 DONE 3.3s
#5 [1/4] FROM docker.io/library/node:16@sha256:1ed1e17ccabb09038cfb8a965337ebcda51ef9e9d32082164c502d44d9731a02
#5 extracting sha256:f08b88f29371de7c9ac165381b7426349760f6af3f205e8716426fafce4a1ff2
#5 extracting sha256:f08b88f29371de7c9ac165381b7426349760f6af3f205e8716426fafce4a1ff2 1.6s done
#5 extracting sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3
#5 extracting sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 4.1s done
#5 DONE 9.0s
#5 [1/4] FROM docker.io/library/node:16@sha256:1ed1e17ccabb09038cfb8a965337ebcda51ef9e9d32082164c502d44d9731a02
#5 extracting sha256:4ed42ef80d39f33716b3a9f0596533074d8370da8fbccb85a88dc50ec6432f44
#5 extracting sha256:4ed42ef80d39f33716b3a9f0596533074d8370da8fbccb85a88dc50ec6432f44 1.6s done
#5 extracting sha256:bebe51b791bc86d404fb655a06cbae27bb6e6d594488bf74620be25b1dedc4df
#5 extracting sha256:bebe51b791bc86d404fb655a06cbae27bb6e6d594488bf74620be25b1dedc4df 2.3s done
#5 extracting sha256:986a235ce43f98d4f2106f9e64a9456f0034448d7f81074796416db134a2b812
#5 extracting sha256:986a235ce43f98d4f2106f9e64a9456f0034448d7f81074796416db134a2b812 1.8s done
#5 extracting sha256:92cdf774b8834b61a047f6be5942c23659eea9df42523b7da5184aecfb9e4f20
#5 extracting sha256:92cdf774b8834b61a047f6be5942c23659eea9df42523b7da5184aecfb9e4f20 1.7s done
#5 DONE 16.3s
#6 [2/4] RUN mkdir /app
#6 DONE 1.7s
#7 [3/4] WORKDIR /app
#7 DONE 1.8s
#8 [4/4] RUN npm install express yaml
#8 4.165
#8 4.165 added 58 packages, and audited 59 packages in 2s
#8 4.165
#8 4.165 7 packages are looking for funding
#8 4.165 run `npm fund` for details
#8 4.166
#8 4.166 found 0 vulnerabilities
#8 4.167 npm notice
#8 4.167 npm notice New minor version of npm available! 8.11.0 -> 8.16.0
#8 4.167 npm notice Changelog: <https://github.com/npm/cli/releases/tag/v8.16.0>
#8 4.167 npm notice Run `npm install -g [email protected]` to update!
#8 4.167 npm notice
#8 DONE 4.3s
#9 exporting to image
#9 exporting layers
#9 exporting layers 2.6s done
#9 exporting manifest sha256:0200aeee39a1a7af2a25280195ff6f0075bd903e7bd8d821be787879085fd788
#9 exporting manifest sha256:0200aeee39a1a7af2a25280195ff6f0075bd903e7bd8d821be787879085fd788 0.1s done
#9 exporting config sha256:d72e5e222e0cf4a2313e2e32b8f3f88991d732b956d07ca6607b75244b5ef97f
#9 exporting config sha256:d72e5e222e0cf4a2313e2e32b8f3f88991d732b956d07ca6607b75244b5ef97f 0.1s done
#9 pushing layers
#9 pushing layers 1.8s done
#9 pushing manifest for docker-registry.default.svc.cluster.local:5000/centos:latest@sha256:0200aeee39a1a7af2a25280195ff6f0075bd903e7bd8d821be787879085fd788
#9 pushing manifest for docker-registry.default.svc.cluster.local:5000/centos:latest@sha256:0200aeee39a1a7af2a25280195ff6f0075bd903e7bd8d821be787879085fd788 0.0s done
#9 DONE 4.6s
#10 exporting cache
#10 preparing build cache for export 0.1s done
#10 writing layer sha256:06048439c7d43849fcbc5ff39148be4476fbd0abfb24f1611435c7404f1e03cd
#10 writing layer sha256:06048439c7d43849fcbc5ff39148be4476fbd0abfb24f1611435c7404f1e03cd 0.0s done
#10 writing layer sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3
#10 writing layer sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 1.3s done
#10 writing layer sha256:4ed42ef80d39f33716b3a9f0596533074d8370da8fbccb85a88dc50ec6432f44
#10 writing layer sha256:4ed42ef80d39f33716b3a9f0596533074d8370da8fbccb85a88dc50ec6432f44 0.0s done
#10 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 0.0s done
#10 writing layer sha256:4fe4e1c58b4af82939a918665dd1e7b5b636dd73c710b4bccb530edbb15470d2 0.0s done
#10 writing layer sha256:7e6a53d1988fa8e19db6bcfc96ee6783afb079c38dbe047528e691815d19a9fa
#10 writing layer sha256:7e6a53d1988fa8e19db6bcfc96ee6783afb079c38dbe047528e691815d19a9fa 0.4s done
#10 writing layer sha256:92cdf774b8834b61a047f6be5942c23659eea9df42523b7da5184aecfb9e4f20
#10 writing layer sha256:92cdf774b8834b61a047f6be5942c23659eea9df42523b7da5184aecfb9e4f20 0.0s done
#10 writing layer sha256:986a235ce43f98d4f2106f9e64a9456f0034448d7f81074796416db134a2b812 0.0s done
#10 writing layer sha256:bebe51b791bc86d404fb655a06cbae27bb6e6d594488bf74620be25b1dedc4df
#10 writing layer sha256:bebe51b791bc86d404fb655a06cbae27bb6e6d594488bf74620be25b1dedc4df 0.2s done
#10 writing layer sha256:cc915d298757b72963f0d061cc16ca4925e9f4481446b87a5297b4043ffc8033
#10 writing layer sha256:cc915d298757b72963f0d061cc16ca4925e9f4481446b87a5297b4043ffc8033 0.1s done
#10 writing layer sha256:f08b88f29371de7c9ac165381b7426349760f6af3f205e8716426fafce4a1ff2
#10 writing layer sha256:f08b88f29371de7c9ac165381b7426349760f6af3f205e8716426fafce4a1ff2 0.4s done
#10 writing layer sha256:fd62d6f4b94816c165fdfa32f617ca13e2134b3f340f4bdbd0c6d163ba46c698 0.0s done
#10 writing config sha256:79ea2680cdaefbb71423e27f54ce776b832295108599fa00b6408cdd38ef6060 0.0s done
#10 writing manifest sha256:d12a2790504a16b461c2ec187446205fd65a8d39f5e918e16bb1c66d7238401c 0.0s done
#10 DONE 2.7s
------
> importing cache manifest from docker-registry.caching.svc.cluster.local:5000/centos:buildcache:
------
With Cache Populated and a new RUN statement
Dockerfile Updated:
FROM node:16
RUN mkdir /app
WORKDIR /app
RUN npm install express yaml
RUN npm install lodash
With Docker Desktop:
[+] Building 2.0s (9/9) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 137B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/node:16 0.0s
=> [1/5] FROM docker.io/library/node:16 0.0s
=> CACHED [2/5] RUN mkdir /app 0.0s
=> CACHED [3/5] WORKDIR /app 0.0s
=> CACHED [4/5] RUN npm install express yaml 0.0s
=> [5/5] RUN npm install lodash 1.8s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:026c1afb3b14bb6058404a0047e92cf0875edcf41b47fc74cb6f84b48d9f0599
With BuildCtl:
#1 [internal] load .dockerignore
#1 transferring context: 2B done
#1 DONE 0.0s
#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 501B 0.0s done
#2 DONE 0.0s
#3 [internal] load metadata for docker.io/library/node:16
#3 DONE 0.3s
#4 [1/5] FROM docker.io/library/node:16@sha256:1ed1e17ccabb09038cfb8a965337ebcda51ef9e9d32082164c502d44d9731a02
#4 resolve docker.io/library/node:16@sha256:1ed1e17ccabb09038cfb8a965337ebcda51ef9e9d32082164c502d44d9731a02 0.0s done
#4 DONE 0.0s
#5 importing cache manifest from docker-registry.caching.svc.cluster.local:5000/centos:buildcache
#5 DONE 0.0s
#6 [3/5] WORKDIR /app
#6 CACHED
#7 [2/5] RUN mkdir /app
#7 CACHED
#8 [4/5] RUN npm install express yaml
#8 sha256:06048439c7d43849fcbc5ff39148be4476fbd0abfb24f1611435c7404f1e03cd 2.34MB / 2.34MB 0.1s done
#8 sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 32B / 32B 0.1s done
#8 sha256:fd62d6f4b94816c165fdfa32f617ca13e2134b3f340f4bdbd0c6d163ba46c698 99B / 99B 0.1s done
#8 sha256:92cdf774b8834b61a047f6be5942c23659eea9df42523b7da5184aecfb9e4f20 451B / 451B 0.1s done
#8 sha256:986a235ce43f98d4f2106f9e64a9456f0034448d7f81074796416db134a2b812 2.29MB / 2.29MB 0.0s done
#8 sha256:4ed42ef80d39f33716b3a9f0596533074d8370da8fbccb85a88dc50ec6432f44 4.20kB / 4.20kB 0.0s done
#8 sha256:cc915d298757b72963f0d061cc16ca4925e9f4481446b87a5297b4043ffc8033 10.00MB / 10.00MB 0.1s done
#8 sha256:bebe51b791bc86d404fb655a06cbae27bb6e6d594488bf74620be25b1dedc4df 32.51MB / 34.09MB 0.2s
#8 sha256:bebe51b791bc86d404fb655a06cbae27bb6e6d594488bf74620be25b1dedc4df 34.09MB / 34.09MB 0.2s done
#8 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 35.65MB / 192.50MB 0.2s
#8 sha256:4fe4e1c58b4af82939a918665dd1e7b5b636dd73c710b4bccb530edbb15470d2 7.86MB / 7.86MB 0.1s done
#8 sha256:f08b88f29371de7c9ac165381b7426349760f6af3f205e8716426fafce4a1ff2 46.14MB / 51.84MB 0.2s
#8 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 73.40MB / 192.50MB 0.3s
#8 sha256:f08b88f29371de7c9ac165381b7426349760f6af3f205e8716426fafce4a1ff2 51.84MB / 51.84MB 0.3s done
#8 sha256:7e6a53d1988fa8e19db6bcfc96ee6783afb079c38dbe047528e691815d19a9fa 37.75MB / 50.44MB 0.2s
#8 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 113.25MB / 192.50MB 0.5s
#8 sha256:7e6a53d1988fa8e19db6bcfc96ee6783afb079c38dbe047528e691815d19a9fa 50.44MB / 50.44MB 0.3s done
#8 extracting sha256:7e6a53d1988fa8e19db6bcfc96ee6783afb079c38dbe047528e691815d19a9fa
#8 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 152.04MB / 192.50MB 0.6s
#8 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 191.89MB / 192.50MB 0.8s
#8 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 192.50MB / 192.50MB 1.7s done
#8 extracting sha256:7e6a53d1988fa8e19db6bcfc96ee6783afb079c38dbe047528e691815d19a9fa 1.3s done
#8 DONE 2.2s
#8 [4/5] RUN npm install express yaml
#8 extracting sha256:4fe4e1c58b4af82939a918665dd1e7b5b636dd73c710b4bccb530edbb15470d2
#8 extracting sha256:4fe4e1c58b4af82939a918665dd1e7b5b636dd73c710b4bccb530edbb15470d2 0.5s done
#8 extracting sha256:cc915d298757b72963f0d061cc16ca4925e9f4481446b87a5297b4043ffc8033
#8 extracting sha256:cc915d298757b72963f0d061cc16ca4925e9f4481446b87a5297b4043ffc8033 0.5s done
#8 DONE 3.2s
#8 [4/5] RUN npm install express yaml
#8 extracting sha256:f08b88f29371de7c9ac165381b7426349760f6af3f205e8716426fafce4a1ff2
#8 extracting sha256:f08b88f29371de7c9ac165381b7426349760f6af3f205e8716426fafce4a1ff2 1.5s done
#8 extracting sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3
#8 extracting sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 4.1s done
#8 extracting sha256:4ed42ef80d39f33716b3a9f0596533074d8370da8fbccb85a88dc50ec6432f44
#8 extracting sha256:4ed42ef80d39f33716b3a9f0596533074d8370da8fbccb85a88dc50ec6432f44 1.6s done
#8 DONE 10.4s
#8 [4/5] RUN npm install express yaml
#8 extracting sha256:bebe51b791bc86d404fb655a06cbae27bb6e6d594488bf74620be25b1dedc4df
#8 extracting sha256:bebe51b791bc86d404fb655a06cbae27bb6e6d594488bf74620be25b1dedc4df 2.4s done
#8 extracting sha256:986a235ce43f98d4f2106f9e64a9456f0034448d7f81074796416db134a2b812
#8 extracting sha256:986a235ce43f98d4f2106f9e64a9456f0034448d7f81074796416db134a2b812 1.8s done
#8 extracting sha256:92cdf774b8834b61a047f6be5942c23659eea9df42523b7da5184aecfb9e4f20
#8 extracting sha256:92cdf774b8834b61a047f6be5942c23659eea9df42523b7da5184aecfb9e4f20 1.7s done
#8 DONE 16.3s
#8 [4/5] RUN npm install express yaml
#8 extracting sha256:fd62d6f4b94816c165fdfa32f617ca13e2134b3f340f4bdbd0c6d163ba46c698
#8 extracting sha256:fd62d6f4b94816c165fdfa32f617ca13e2134b3f340f4bdbd0c6d163ba46c698 1.7s done
#8 extracting sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1
#8 extracting sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 1.9s done
#8 extracting sha256:06048439c7d43849fcbc5ff39148be4476fbd0abfb24f1611435c7404f1e03cd
#8 extracting sha256:06048439c7d43849fcbc5ff39148be4476fbd0abfb24f1611435c7404f1e03cd 2.1s done
#8 DONE 22.0s
#9 [5/5] RUN npm install lodash
#9 2.699
#9 2.699 added 1 package, and audited 60 packages in 563ms
#9 2.699
#9 2.699 7 packages are looking for funding
#9 2.699 run `npm fund` for details
#9 2.700
#9 2.700 found 0 vulnerabilities
#9 DONE 2.9s
#10 exporting to image
#10 exporting layers
#10 exporting layers 2.1s done
#10 exporting manifest sha256:41d6cb27640c84e8962a72cd9b2e4d5e2151a5d4f669dcd9808202dad0143cbf
#10 exporting manifest sha256:41d6cb27640c84e8962a72cd9b2e4d5e2151a5d4f669dcd9808202dad0143cbf 0.1s done
#10 exporting config sha256:c22c43b15ddd4f7f0f693dfc350171880d0096d340d8666525a417e7fb067f4d
#10 exporting config sha256:c22c43b15ddd4f7f0f693dfc350171880d0096d340d8666525a417e7fb067f4d 0.1s done
#10 pushing layers
#10 pushing layers 0.4s done
#10 pushing manifest for docker-registry.default.svc.cluster.local:5000/centos:latest@sha256:41d6cb27640c84e8962a72cd9b2e4d5e2151a5d4f669dcd9808202dad0143cbf
#10 pushing manifest for docker-registry.default.svc.cluster.local:5000/centos:latest@sha256:41d6cb27640c84e8962a72cd9b2e4d5e2151a5d4f669dcd9808202dad0143cbf 0.0s done
#10 DONE 2.8s
#11 exporting cache
#11 preparing build cache for export
#11 preparing build cache for export 1.7s done
#11 writing layer sha256:06048439c7d43849fcbc5ff39148be4476fbd0abfb24f1611435c7404f1e03cd done
#11 writing layer sha256:1139c3fd69998907ceb9d91aa354f232f42dc0c41da8eabac896b629fc03dbc1 0.0s done
#11 writing layer sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 done
#11 writing layer sha256:4ed42ef80d39f33716b3a9f0596533074d8370da8fbccb85a88dc50ec6432f44 done
#11 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done
#11 writing layer sha256:4fe4e1c58b4af82939a918665dd1e7b5b636dd73c710b4bccb530edbb15470d2 done
#11 writing layer sha256:7e6a53d1988fa8e19db6bcfc96ee6783afb079c38dbe047528e691815d19a9fa done
#11 writing layer sha256:92cdf774b8834b61a047f6be5942c23659eea9df42523b7da5184aecfb9e4f20 done
#11 writing layer sha256:986a235ce43f98d4f2106f9e64a9456f0034448d7f81074796416db134a2b812 done
#11 writing layer sha256:bebe51b791bc86d404fb655a06cbae27bb6e6d594488bf74620be25b1dedc4df done
#11 writing layer sha256:cc915d298757b72963f0d061cc16ca4925e9f4481446b87a5297b4043ffc8033 done
#11 writing layer sha256:f08b88f29371de7c9ac165381b7426349760f6af3f205e8716426fafce4a1ff2 done
#11 writing layer sha256:fd62d6f4b94816c165fdfa32f617ca13e2134b3f340f4bdbd0c6d163ba46c698 done
#11 writing config sha256:aa25935188d8bbfc059dd02a59334fdcc184b52b8981be6c009733d76f2bacd8 0.0s done
#11 writing manifest sha256:fad1ec277f8d0728fceb8ae85274c497f34b0f5bffa1c4cac0bc4cc2d2593e0a 0.0s done
#11 DONE 1.8s
Observations / Questions
Docker Desktop seems to function as I'd expect. Cache hits for all layers except for the new Layer: RUN npm install lodash.
Logging in BuildCtl appears to show a Cache hit for 2 items:
#6 [3/5] WORKDIR /app
#6 CACHED
#7 [2/5] RUN mkdir /app
#7 CACHED
However no cache hit for RUN npm install express yaml. This appears to trigger a re-download of the base FROM node:16 image and layers that should be already cached:
Re-downloading the base image?
#8 sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 192.50MB / 192.50MB 1.7s done
Even though this SHA has been cached already?
#10 exporting cache
#10 writing layer sha256:28bcb226aca8a93d00b37f03b7a39ed5ab0634ae0b3721c05d551b7c25e470d3 1.3s done
Am I missing something or is this expected behavior?
Thanks!
You might want to check your build cache records before second build and how they compare to your GC policy.
buildctl du -v
buildctl debug workers -v
I've also ran into similar cache misses that I can't explain using buildkit. The only fairly consistent repros I've found look like:
- Run build on branch A
- Switch to branch B. Rerun build
- Switch back to branch A
I'm on Mac, and as far as I'm aware there's no way for me to run buildctl with the builder instance I'm using (please correct me if I'm wrong). My config includes:
{
"builder": {
"gc": {
"enabled": true,
"policy": [
{
"filter": [
"unused-for=168h"
],
"keepStorage": "500GB"
}
]
}
},..
}
while docker buildx du indicates that my total storage is less than 250GB and a single fresh build is about 50GB, so I don't believe it's a GC issue. I'm struggling to find good resources on exactly how GC works, so I definitely could be wrong.
Any guidance at all would be appreciated.
there's no way for me to run buildctl with the builder instance I'm using (please correct me if I'm wrong).
Just set BUILDKIT_HOST=docker-container://... . But you shouldn't expect any different output than what you see in buildx.
If you have a repro case you can post it but it should really be much smaller than 50GB.
@tonistiigi Ty. I don't have a repro I can share at the moment- I'll work on it.