The Top App Development Trends Shaping the Industry in 2024-25 .pdf
BuildKitのlazy pulling機能でベースイメージのpullを省略してビルドをする
1. Copyright(c)2021 NTT Corp. All Rights Reserved
BuildKit lazy pulling
pull
2021/5/28
Docker Meetup Tokyo #35 (LT)
2. Copyright(c)2021 NTT Corp. All Rights Reserved
GitHub:@ktock / Twitter:@TokunagaKohei
containerd
containerd Stargz Snapshotter
Container Runtime Meetup 2
3. Copyright(c)2021 NTT Corp. All Rights Reserved
pull
l
•
l pull
•
• Local cache 3
l pull
pulling packages accounts for 76% of container start time,
but only 6.4% of that data is read [Harter et al. 2016]
[Harter et al. 2016] Tyler Harter, Brandon Salmon, Rose Liu, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau. "Slacker: Fast Distribution with
Lazy Docker Containers". 14th USENIX Conference on File and Storage Technologies (FAST ’16). February 22–25, 2016, Santa Clara, CA, USA
Image X
COPY –-from=A
COPY –-from=B
A B
4. Copyright(c)2021 NTT Corp. All Rights Reserved
BuildKit lazy pulling
FROM ghcr.io/stargz-containers/golang:1.15.3-esgz as dev
COPY ./hello.go /hello.go
RUN go build -o hello /hello.go
lazy
pull
• /usr/local/go/bin/go
• /usr/local/go/src/fmt/…
etc...
Pull COPY RUN
golang:1.15.3-esgz pull
eStargz
l BuildKit > v0.8.0 experimental
l pull lazy pulling
• eStargz 4
• FROM pull 4 COPY RUN pull 4
5. Copyright(c)2021 NTT Corp. All Rights Reserved
eStargz
l Lazy pulling /
• gzip OCI lazy pull ” ”
• BuildKit Kubernetes containerd CRI-O Podman lazy pulling
l 5
• Google CRFS https://github.com/google/crfs stargz
• 5
tar.gz
HTTP Range Request
pull
bin/ls
etc/group
usr/bin/apt
/ gzip
tar.gz
eStargz
bin/ls
usr/bin/apt
entrypoint.sh
bin/bash Range Request
bin/bash
entrypoint.sh
TOCEntries footer
https://github.com/containerd/stargz-snapshotter
6. Copyright(c)2021 NTT Corp. All Rights Reserved
Buildx Lazy Pull BuildKit
DEMO hello world C
46.897 sec → 11.620 sec
$ docker buildx create --use --name lazy-builder
--buildkitd-flags '--oci-worker-snapshotter=stargz’
$ docker buildx inspect --bootstrap lazy-builder
Lazy pulling
`docker build`
FROM ghcr.io/stargz-containers/gcc:10.2.0-esgz as dev
COPY ./main.c /root/
RUN cd /root && gcc –static –o hello ./main.c
FROM scratch
COPY --from=dev /root/hello /hello
ENTRYPOINT [ “/hello” ]