1515# -----------------------------------------------------------------------------
1616# Usage: `docker run -it --privileged <IMAGE>`. Make sure to add `-t` and `--privileged`.
1717
18- # TODO: verify commit hash
19-
2018# Basic deps
21- ARG CONTAINERD_VERSION=v2.0.3
22- ARG RUNC_VERSION=v1.2.5
23- ARG CNI_PLUGINS_VERSION=v1.6.2
19+ # @BINARY: the binary checksums are verified via Dockerfile.d/SHA256SUMS.d/<COMPONENT>-<VERSION>
20+ ARG CONTAINERD_VERSION=v2.0.4@1a43cb6a1035441f9aca8f5666a9b3ef9e70ab20
21+ ARG RUNC_VERSION=v1.2.6@e89a29929c775025419ab0d218a43588b4c12b9a
22+ ARG CNI_PLUGINS_VERSION=v1.6.2@BINARY
2423
2524# Extra deps: Build
26- ARG BUILDKIT_VERSION=v0.20.1
25+ ARG BUILDKIT_VERSION=v0.20.1@BINARY
2726# Extra deps: Lazy-pulling
28- ARG STARGZ_SNAPSHOTTER_VERSION=v0.16.3
27+ ARG STARGZ_SNAPSHOTTER_VERSION=v0.16.3@BINARY
2928# Extra deps: Encryption
30- ARG IMGCRYPT_VERSION=v2.0.0
29+ ARG IMGCRYPT_VERSION=v2.0.1@c377ec98ff79ec9205eabf555ebd2ea784738c6c
3130# Extra deps: Rootless
32- ARG ROOTLESSKIT_VERSION=v2.3.4
33- ARG SLIRP4NETNS_VERSION=v1.3.1
31+ ARG ROOTLESSKIT_VERSION=v2.3.4@BINARY
32+ ARG SLIRP4NETNS_VERSION=v1.3.2@BINARY
3433# Extra deps: bypass4netns
35- ARG BYPASS4NETNS_VERSION=v0.4.2
34+ ARG BYPASS4NETNS_VERSION=v0.4.2@aa04bd3dcc48c6dae6d7327ba219bda8fe2a4634
3635# Extra deps: FUSE-OverlayFS
37- ARG FUSE_OVERLAYFS_VERSION=v1.14
38- ARG CONTAINERD_FUSE_OVERLAYFS_VERSION=v2.1.1
36+ ARG FUSE_OVERLAYFS_VERSION=v1.14@BINARY
37+ ARG CONTAINERD_FUSE_OVERLAYFS_VERSION=v2.1.2@BINARY
3938# Extra deps: Init
40- ARG TINI_VERSION=v0.19.0
39+ ARG TINI_VERSION=v0.19.0@BINARY
4140# Extra deps: Debug
42- ARG BUILDG_VERSION=v0.4.1
41+ ARG BUILDG_VERSION=v0.4.1@BINARY
4342
4443# Test deps
44+ # Currently, the Docker Official Images and the test deps are not pinned by the hash
4545ARG GO_VERSION=1.24
4646ARG UBUNTU_VERSION=24.04
4747ARG CONTAINERIZED_SYSTEMD_VERSION=v0.1.1
4848ARG GOTESTSUM_VERSION=v1.12.0
4949ARG NYDUS_VERSION=v2.3.0
5050ARG SOCI_SNAPSHOTTER_VERSION=0.8.0
51- ARG KUBO_VERSION=v0.32.1
51+ ARG KUBO_VERSION=v0.33.2
5252
53- FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.6.1 AS xx
53+ FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.6.1@sha256:923441d7c25f1e2eb5789f82d987693c47b8ed987c4ab3b075d6ed2b5d6779a3 AS xx
5454
5555
5656FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-bookworm AS build-base-debian
@@ -70,13 +70,14 @@ RUN xx-apt-get update -qq && xx-apt-get install -qq --no-install-recommends \
7070 libseccomp-dev \
7171 pkg-config
7272RUN git config --global advice.detachedHead false
73+ ADD hack/git-checkout-tag-with-hash.sh /usr/local/bin/
7374
7475FROM build-base-debian AS build-containerd
7576ARG TARGETARCH
7677ARG CONTAINERD_VERSION
7778RUN git clone https://github.com/containerd/containerd.git /go/src/github.com/containerd/containerd
7879WORKDIR /go/src/github.com/containerd/containerd
79- RUN git checkout ${CONTAINERD_VERSION} && \
80+ RUN git- checkout-tag-with-hash.sh ${CONTAINERD_VERSION} && \
8081 mkdir -p /out /out/$TARGETARCH && \
8182 cp -a containerd.service /out
8283RUN GO=xx-go make STATIC=1 && \
@@ -87,7 +88,7 @@ ARG RUNC_VERSION
8788ARG TARGETARCH
8889RUN git clone https://github.com/opencontainers/runc.git /go/src/github.com/opencontainers/runc
8990WORKDIR /go/src/github.com/opencontainers/runc
90- RUN git checkout ${RUNC_VERSION} && \
91+ RUN git- checkout-tag-with-hash.sh ${RUNC_VERSION} && \
9192 mkdir -p /out
9293ENV CGO_ENABLED=1
9394RUN GO=xx-go CC=$(xx-info)-gcc STRIP=$(xx-info)-strip make static && \
@@ -98,7 +99,7 @@ ARG BYPASS4NETNS_VERSION
9899ARG TARGETARCH
99100RUN git clone https://github.com/rootless-containers/bypass4netns.git /go/src/github.com/rootless-containers/bypass4netns
100101WORKDIR /go/src/github.com/rootless-containers/bypass4netns
101- RUN git checkout ${BYPASS4NETNS_VERSION} && \
102+ RUN git- checkout-tag-with-hash.sh ${BYPASS4NETNS_VERSION} && \
102103 mkdir -p /out/${TARGETARCH}
103104ENV CGO_ENABLED=1
104105RUN GO=xx-go make static && \
@@ -109,7 +110,7 @@ ARG KUBO_VERSION
109110ARG TARGETARCH
110111RUN git clone https://github.com/ipfs/kubo.git /go/src/github.com/ipfs/kubo
111112WORKDIR /go/src/github.com/ipfs/kubo
112- RUN git checkout ${KUBO_VERSION} && \
113+ RUN git- checkout-tag-with-hash.sh ${KUBO_VERSION} && \
113114 mkdir -p /out/${TARGETARCH}
114115ENV CGO_ENABLED=0
115116RUN xx-go --wrap && \
@@ -119,6 +120,7 @@ RUN xx-go --wrap && \
119120FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS build-base
120121RUN apk add --no-cache make git curl
121122RUN git config --global advice.detachedHead false
123+ ADD hack/git-checkout-tag-with-hash.sh /usr/local/bin/
122124
123125FROM build-base AS build-minimal
124126RUN BINDIR=/out/bin make binaries install
@@ -134,20 +136,22 @@ RUN mkdir -p /out/share/doc/nerdctl-full && touch /out/share/doc/nerdctl-full/RE
134136ARG CONTAINERD_VERSION
135137COPY --from=build-containerd /out/${TARGETARCH:-amd64}/* /out/bin/
136138COPY --from=build-containerd /out/containerd.service /out/lib/systemd/system/containerd.service
137- RUN echo "- containerd: ${CONTAINERD_VERSION}" >> /out/share/doc/nerdctl-full/README.md
139+ RUN echo "- containerd: ${CONTAINERD_VERSION/@* }" >> /out/share/doc/nerdctl-full/README.md
138140ARG RUNC_VERSION
139141COPY --from=build-runc /out/runc.${TARGETARCH:-amd64} /out/bin/runc
140- RUN echo "- runc: ${RUNC_VERSION}" >> /out/share/doc/nerdctl-full/README.md
142+ RUN echo "- runc: ${RUNC_VERSION/@* }" >> /out/share/doc/nerdctl-full/README.md
141143ARG CNI_PLUGINS_VERSION
142- RUN fname="cni-plugins-${TARGETOS:-linux}-${TARGETARCH:-amd64}-${CNI_PLUGINS_VERSION}.tgz" && \
144+ RUN CNI_PLUGINS_VERSION=${CNI_PLUGINS_VERSION/@BINARY}; \
145+ fname="cni-plugins-${TARGETOS:-linux}-${TARGETARCH:-amd64}-${CNI_PLUGINS_VERSION}.tgz" && \
143146 curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/containernetworking/plugins/releases/download/${CNI_PLUGINS_VERSION}/${fname}" && \
144147 grep "${fname}" "/SHA256SUMS.d/cni-plugins-${CNI_PLUGINS_VERSION}" | sha256sum -c && \
145148 mkdir -p /out/libexec/cni && \
146149 tar xzf "${fname}" -C /out/libexec/cni && \
147150 rm -f "${fname}" && \
148151 echo "- CNI plugins: ${CNI_PLUGINS_VERSION}" >> /out/share/doc/nerdctl-full/README.md
149152ARG BUILDKIT_VERSION
150- RUN fname="buildkit-${BUILDKIT_VERSION}.${TARGETOS:-linux}-${TARGETARCH:-amd64}.tar.gz" && \
153+ RUN BUILDKIT_VERSION=${BUILDKIT_VERSION/@BINARY}; \
154+ fname="buildkit-${BUILDKIT_VERSION}.${TARGETOS:-linux}-${TARGETARCH:-amd64}.tar.gz" && \
151155 curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/moby/buildkit/releases/download/${BUILDKIT_VERSION}/${fname}" && \
152156 grep "${fname}" "/SHA256SUMS.d/buildkit-${BUILDKIT_VERSION}" | sha256sum -c && \
153157 tar xzf "${fname}" -C /out && \
@@ -161,7 +165,8 @@ RUN cd /out/lib/systemd/system && \
161165 echo "" >> buildkit.service && \
162166 echo "# This file was converted from containerd.service, with \` sed -E '${sedcomm}'\` " >> buildkit.service
163167ARG STARGZ_SNAPSHOTTER_VERSION
164- RUN fname="stargz-snapshotter-${STARGZ_SNAPSHOTTER_VERSION}-${TARGETOS:-linux}-${TARGETARCH:-amd64}.tar.gz" && \
168+ RUN STARGZ_SNAPSHOTTER_VERSION=${STARGZ_SNAPSHOTTER_VERSION/@BINARY}; \
169+ fname="stargz-snapshotter-${STARGZ_SNAPSHOTTER_VERSION}-${TARGETOS:-linux}-${TARGETARCH:-amd64}.tar.gz" && \
165170 curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/containerd/stargz-snapshotter/releases/download/${STARGZ_SNAPSHOTTER_VERSION}/${fname}" && \
166171 curl -o "stargz-snapshotter.service" -fsSL --proto '=https' --tlsv1.2 "https://raw.githubusercontent.com/containerd/stargz-snapshotter/${STARGZ_SNAPSHOTTER_VERSION}/script/config/etc/systemd/system/stargz-snapshotter.service" && \
167172 grep "${fname}" "/SHA256SUMS.d/stargz-snapshotter-${STARGZ_SNAPSHOTTER_VERSION}" | sha256sum -c - && \
@@ -173,48 +178,54 @@ RUN fname="stargz-snapshotter-${STARGZ_SNAPSHOTTER_VERSION}-${TARGETOS:-linux}-$
173178ARG IMGCRYPT_VERSION
174179RUN git clone https://github.com/containerd/imgcrypt.git /go/src/github.com/containerd/imgcrypt && \
175180 cd /go/src/github.com/containerd/imgcrypt && \
176- git checkout "${IMGCRYPT_VERSION}" && \
181+ git- checkout-tag-with-hash.sh "${IMGCRYPT_VERSION}" && \
177182 CGO_ENABLED=0 make && DESTDIR=/out make install && \
178- echo "- imgcrypt: ${IMGCRYPT_VERSION}" >> /out/share/doc/nerdctl-full/README.md
183+ echo "- imgcrypt: ${IMGCRYPT_VERSION/@* }" >> /out/share/doc/nerdctl-full/README.md
179184ARG SLIRP4NETNS_VERSION
180- RUN fname="slirp4netns-$(cat /target_uname_m)" && \
185+ RUN SLIRP4NETNS_VERSION=${SLIRP4NETNS_VERSION/@BINARY}; \
186+ fname="slirp4netns-$(cat /target_uname_m)" && \
181187 curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/rootless-containers/slirp4netns/releases/download/${SLIRP4NETNS_VERSION}/${fname}" && \
182188 grep "${fname}" "/SHA256SUMS.d/slirp4netns-${SLIRP4NETNS_VERSION}" | sha256sum -c && \
183189 mv "${fname}" /out/bin/slirp4netns && \
184190 chmod +x /out/bin/slirp4netns && \
185191 echo "- slirp4netns: ${SLIRP4NETNS_VERSION}" >> /out/share/doc/nerdctl-full/README.md
186192ARG BYPASS4NETNS_VERSION
187193COPY --from=build-bypass4netns /out/${TARGETARCH:-amd64}/* /out/bin/
188- RUN echo "- bypass4netns: ${BYPASS4NETNS_VERSION}" >> /out/share/doc/nerdctl-full/README.md
194+ RUN echo "- bypass4netns: ${BYPASS4NETNS_VERSION/@* }" >> /out/share/doc/nerdctl-full/README.md
189195ARG FUSE_OVERLAYFS_VERSION
190- RUN fname="fuse-overlayfs-$(cat /target_uname_m)" && \
196+ RUN FUSE_OVERLAYFS_VERSION=${FUSE_OVERLAYFS_VERSION/@BINARY}; \
197+ fname="fuse-overlayfs-$(cat /target_uname_m)" && \
191198 curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/containers/fuse-overlayfs/releases/download/${FUSE_OVERLAYFS_VERSION}/${fname}" && \
192199 grep "${fname}" "/SHA256SUMS.d/fuse-overlayfs-${FUSE_OVERLAYFS_VERSION}" | sha256sum -c && \
193200 mv "${fname}" /out/bin/fuse-overlayfs && \
194201 chmod +x /out/bin/fuse-overlayfs && \
195202 echo "- fuse-overlayfs: ${FUSE_OVERLAYFS_VERSION}" >> /out/share/doc/nerdctl-full/README.md
196203ARG CONTAINERD_FUSE_OVERLAYFS_VERSION
197- RUN fname="containerd-fuse-overlayfs-${CONTAINERD_FUSE_OVERLAYFS_VERSION/v}-${TARGETOS:-linux}-${TARGETARCH:-amd64}.tar.gz" && \
204+ RUN CONTAINERD_FUSE_OVERLAYFS_VERSION=${CONTAINERD_FUSE_OVERLAYFS_VERSION/@BINARY}; \
205+ fname="containerd-fuse-overlayfs-${CONTAINERD_FUSE_OVERLAYFS_VERSION/v}-${TARGETOS:-linux}-${TARGETARCH:-amd64}.tar.gz" && \
198206 curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/containerd/fuse-overlayfs-snapshotter/releases/download/${CONTAINERD_FUSE_OVERLAYFS_VERSION}/${fname}" && \
199207 grep "${fname}" "/SHA256SUMS.d/containerd-fuse-overlayfs-${CONTAINERD_FUSE_OVERLAYFS_VERSION}" | sha256sum -c && \
200208 tar xzf "${fname}" -C /out/bin && \
201209 rm -f "${fname}" && \
202210 echo "- containerd-fuse-overlayfs: ${CONTAINERD_FUSE_OVERLAYFS_VERSION}" >> /out/share/doc/nerdctl-full/README.md
203211ARG TINI_VERSION
204- RUN fname="tini-static-${TARGETARCH:-amd64}" && \
212+ RUN TINI_VERSION=${TINI_VERSION/@BINARY}; \
213+ fname="tini-static-${TARGETARCH:-amd64}" && \
205214 curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/krallin/tini/releases/download/${TINI_VERSION}/${fname}" && \
206215 grep "${fname}" "/SHA256SUMS.d/tini-${TINI_VERSION}" | sha256sum -c && \
207216 cp -a "${fname}" /out/bin/tini && chmod +x /out/bin/tini && \
208217 echo "- Tini: ${TINI_VERSION}" >> /out/share/doc/nerdctl-full/README.md
209218ARG BUILDG_VERSION
210- RUN fname="buildg-${BUILDG_VERSION}-${TARGETOS:-linux}-${TARGETARCH:-amd64}.tar.gz" && \
219+ RUN BUILDG_VERSION=${BUILDG_VERSION/@BINARY}; \
220+ fname="buildg-${BUILDG_VERSION}-${TARGETOS:-linux}-${TARGETARCH:-amd64}.tar.gz" && \
211221 curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/ktock/buildg/releases/download/${BUILDG_VERSION}/${fname}" && \
212222 grep "${fname}" "/SHA256SUMS.d/buildg-${BUILDG_VERSION}" | sha256sum -c && \
213223 tar xzf "${fname}" -C /out/bin && \
214224 rm -f "${fname}" && \
215225 echo "- buildg: ${BUILDG_VERSION}" >> /out/share/doc/nerdctl-full/README.md
216226ARG ROOTLESSKIT_VERSION
217- RUN fname="rootlesskit-$(cat /target_uname_m).tar.gz" && \
227+ RUN ROOTLESSKIT_VERSION=${ROOTLESSKIT_VERSION/@BINARY}; \
228+ fname="rootlesskit-$(cat /target_uname_m).tar.gz" && \
218229 curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/rootless-containers/rootlesskit/releases/download/${ROOTLESSKIT_VERSION}/${fname}" && \
219230 grep "${fname}" "/SHA256SUMS.d/rootlesskit-${ROOTLESSKIT_VERSION}" | sha256sum -c && \
220231 tar xzf "${fname}" -C /out/bin && \
@@ -223,10 +234,10 @@ RUN fname="rootlesskit-$(cat /target_uname_m).tar.gz" && \
223234
224235RUN echo "" >> /out/share/doc/nerdctl-full/README.md && \
225236 echo "## License" >> /out/share/doc/nerdctl-full/README.md && \
226- echo "- bin/slirp4netns: [GNU GENERAL PUBLIC LICENSE, Version 2](https://github.com/rootless-containers/slirp4netns/blob/${SLIRP4NETNS_VERSION}/COPYING)" >> /out/share/doc/nerdctl-full/README.md && \
227- echo "- bin/fuse-overlayfs: [GNU GENERAL PUBLIC LICENSE, Version 2](https://github.com/containers/fuse-overlayfs/blob/${FUSE_OVERLAYFS_VERSION}/COPYING)" >> /out/share/doc/nerdctl-full/README.md && \
237+ echo "- bin/slirp4netns: [GNU GENERAL PUBLIC LICENSE, Version 2](https://github.com/rootless-containers/slirp4netns/blob/${SLIRP4NETNS_VERSION/@* }/COPYING)" >> /out/share/doc/nerdctl-full/README.md && \
238+ echo "- bin/fuse-overlayfs: [GNU GENERAL PUBLIC LICENSE, Version 2](https://github.com/containers/fuse-overlayfs/blob/${FUSE_OVERLAYFS_VERSION/@* }/COPYING)" >> /out/share/doc/nerdctl-full/README.md && \
228239 echo "- bin/{runc,bypass4netns,bypass4netnsd}: Apache License 2.0, statically linked with libseccomp ([LGPL 2.1](https://github.com/seccomp/libseccomp/blob/main/LICENSE), source code available at https://github.com/seccomp/libseccomp/)" >> /out/share/doc/nerdctl-full/README.md && \
229- echo "- bin/tini: [MIT License](https://github.com/krallin/tini/blob/${TINI_VERSION}/LICENSE)" >> /out/share/doc/nerdctl-full/README.md && \
240+ echo "- bin/tini: [MIT License](https://github.com/krallin/tini/blob/${TINI_VERSION/@* }/LICENSE)" >> /out/share/doc/nerdctl-full/README.md && \
230241 echo "- Other files: [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)" >> /out/share/doc/nerdctl-full/README.md
231242
232243FROM build-dependencies AS build-full
0 commit comments