15
15
# -----------------------------------------------------------------------------
16
16
# Usage: `docker run -it --privileged <IMAGE>`. Make sure to add `-t` and `--privileged`.
17
17
18
- # TODO: verify commit hash
19
-
20
18
# 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
24
23
25
24
# Extra deps: Build
26
- ARG BUILDKIT_VERSION=v0.20.1
25
+ ARG BUILDKIT_VERSION=v0.20.1@BINARY
27
26
# Extra deps: Lazy-pulling
28
- ARG STARGZ_SNAPSHOTTER_VERSION=v0.16.3
27
+ ARG STARGZ_SNAPSHOTTER_VERSION=v0.16.3@BINARY
29
28
# Extra deps: Encryption
30
- ARG IMGCRYPT_VERSION=v2.0.0
29
+ ARG IMGCRYPT_VERSION=v2.0.1@c377ec98ff79ec9205eabf555ebd2ea784738c6c
31
30
# 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
34
33
# Extra deps: bypass4netns
35
- ARG BYPASS4NETNS_VERSION=v0.4.2
34
+ ARG BYPASS4NETNS_VERSION=v0.4.2@aa04bd3dcc48c6dae6d7327ba219bda8fe2a4634
36
35
# 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
39
38
# Extra deps: Init
40
- ARG TINI_VERSION=v0.19.0
39
+ ARG TINI_VERSION=v0.19.0@BINARY
41
40
# Extra deps: Debug
42
- ARG BUILDG_VERSION=v0.4.1
41
+ ARG BUILDG_VERSION=v0.4.1@BINARY
43
42
44
43
# Test deps
44
+ # Currently, the Docker Official Images and the test deps are not pinned by the hash
45
45
ARG GO_VERSION=1.24
46
46
ARG UBUNTU_VERSION=24.04
47
47
ARG CONTAINERIZED_SYSTEMD_VERSION=v0.1.1
48
48
ARG GOTESTSUM_VERSION=v1.12.0
49
49
ARG NYDUS_VERSION=v2.3.0
50
50
ARG SOCI_SNAPSHOTTER_VERSION=0.8.0
51
- ARG KUBO_VERSION=v0.32.1
51
+ ARG KUBO_VERSION=v0.33.2
52
52
53
- FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.6.1 AS xx
53
+ FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.6.1@sha256:923441d7c25f1e2eb5789f82d987693c47b8ed987c4ab3b075d6ed2b5d6779a3 AS xx
54
54
55
55
56
56
FROM --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 \
70
70
libseccomp-dev \
71
71
pkg-config
72
72
RUN git config --global advice.detachedHead false
73
+ ADD hack/git-checkout-tag-with-hash.sh /usr/local/bin/
73
74
74
75
FROM build-base-debian AS build-containerd
75
76
ARG TARGETARCH
76
77
ARG CONTAINERD_VERSION
77
78
RUN git clone https://github.com/containerd/containerd.git /go/src/github.com/containerd/containerd
78
79
WORKDIR /go/src/github.com/containerd/containerd
79
- RUN git checkout ${CONTAINERD_VERSION} && \
80
+ RUN git- checkout-tag-with-hash.sh ${CONTAINERD_VERSION} && \
80
81
mkdir -p /out /out/$TARGETARCH && \
81
82
cp -a containerd.service /out
82
83
RUN GO=xx-go make STATIC=1 && \
@@ -87,7 +88,7 @@ ARG RUNC_VERSION
87
88
ARG TARGETARCH
88
89
RUN git clone https://github.com/opencontainers/runc.git /go/src/github.com/opencontainers/runc
89
90
WORKDIR /go/src/github.com/opencontainers/runc
90
- RUN git checkout ${RUNC_VERSION} && \
91
+ RUN git- checkout-tag-with-hash.sh ${RUNC_VERSION} && \
91
92
mkdir -p /out
92
93
ENV CGO_ENABLED=1
93
94
RUN GO=xx-go CC=$(xx-info)-gcc STRIP=$(xx-info)-strip make static && \
@@ -98,7 +99,7 @@ ARG BYPASS4NETNS_VERSION
98
99
ARG TARGETARCH
99
100
RUN git clone https://github.com/rootless-containers/bypass4netns.git /go/src/github.com/rootless-containers/bypass4netns
100
101
WORKDIR /go/src/github.com/rootless-containers/bypass4netns
101
- RUN git checkout ${BYPASS4NETNS_VERSION} && \
102
+ RUN git- checkout-tag-with-hash.sh ${BYPASS4NETNS_VERSION} && \
102
103
mkdir -p /out/${TARGETARCH}
103
104
ENV CGO_ENABLED=1
104
105
RUN GO=xx-go make static && \
@@ -109,7 +110,7 @@ ARG KUBO_VERSION
109
110
ARG TARGETARCH
110
111
RUN git clone https://github.com/ipfs/kubo.git /go/src/github.com/ipfs/kubo
111
112
WORKDIR /go/src/github.com/ipfs/kubo
112
- RUN git checkout ${KUBO_VERSION} && \
113
+ RUN git- checkout-tag-with-hash.sh ${KUBO_VERSION} && \
113
114
mkdir -p /out/${TARGETARCH}
114
115
ENV CGO_ENABLED=0
115
116
RUN xx-go --wrap && \
@@ -119,6 +120,7 @@ RUN xx-go --wrap && \
119
120
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS build-base
120
121
RUN apk add --no-cache make git curl
121
122
RUN git config --global advice.detachedHead false
123
+ ADD hack/git-checkout-tag-with-hash.sh /usr/local/bin/
122
124
123
125
FROM build-base AS build-minimal
124
126
RUN 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
134
136
ARG CONTAINERD_VERSION
135
137
COPY --from=build-containerd /out/${TARGETARCH:-amd64}/* /out/bin/
136
138
COPY --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
138
140
ARG RUNC_VERSION
139
141
COPY --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
141
143
ARG 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" && \
143
146
curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/containernetworking/plugins/releases/download/${CNI_PLUGINS_VERSION}/${fname}" && \
144
147
grep "${fname}" "/SHA256SUMS.d/cni-plugins-${CNI_PLUGINS_VERSION}" | sha256sum -c && \
145
148
mkdir -p /out/libexec/cni && \
146
149
tar xzf "${fname}" -C /out/libexec/cni && \
147
150
rm -f "${fname}" && \
148
151
echo "- CNI plugins: ${CNI_PLUGINS_VERSION}" >> /out/share/doc/nerdctl-full/README.md
149
152
ARG 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" && \
151
155
curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/moby/buildkit/releases/download/${BUILDKIT_VERSION}/${fname}" && \
152
156
grep "${fname}" "/SHA256SUMS.d/buildkit-${BUILDKIT_VERSION}" | sha256sum -c && \
153
157
tar xzf "${fname}" -C /out && \
@@ -161,7 +165,8 @@ RUN cd /out/lib/systemd/system && \
161
165
echo "" >> buildkit.service && \
162
166
echo "# This file was converted from containerd.service, with \` sed -E '${sedcomm}'\` " >> buildkit.service
163
167
ARG 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" && \
165
170
curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/containerd/stargz-snapshotter/releases/download/${STARGZ_SNAPSHOTTER_VERSION}/${fname}" && \
166
171
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" && \
167
172
grep "${fname}" "/SHA256SUMS.d/stargz-snapshotter-${STARGZ_SNAPSHOTTER_VERSION}" | sha256sum -c - && \
@@ -173,48 +178,54 @@ RUN fname="stargz-snapshotter-${STARGZ_SNAPSHOTTER_VERSION}-${TARGETOS:-linux}-$
173
178
ARG IMGCRYPT_VERSION
174
179
RUN git clone https://github.com/containerd/imgcrypt.git /go/src/github.com/containerd/imgcrypt && \
175
180
cd /go/src/github.com/containerd/imgcrypt && \
176
- git checkout "${IMGCRYPT_VERSION}" && \
181
+ git- checkout-tag-with-hash.sh "${IMGCRYPT_VERSION}" && \
177
182
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
179
184
ARG SLIRP4NETNS_VERSION
180
- RUN fname="slirp4netns-$(cat /target_uname_m)" && \
185
+ RUN SLIRP4NETNS_VERSION=${SLIRP4NETNS_VERSION/@BINARY}; \
186
+ fname="slirp4netns-$(cat /target_uname_m)" && \
181
187
curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/rootless-containers/slirp4netns/releases/download/${SLIRP4NETNS_VERSION}/${fname}" && \
182
188
grep "${fname}" "/SHA256SUMS.d/slirp4netns-${SLIRP4NETNS_VERSION}" | sha256sum -c && \
183
189
mv "${fname}" /out/bin/slirp4netns && \
184
190
chmod +x /out/bin/slirp4netns && \
185
191
echo "- slirp4netns: ${SLIRP4NETNS_VERSION}" >> /out/share/doc/nerdctl-full/README.md
186
192
ARG BYPASS4NETNS_VERSION
187
193
COPY --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
189
195
ARG 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)" && \
191
198
curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/containers/fuse-overlayfs/releases/download/${FUSE_OVERLAYFS_VERSION}/${fname}" && \
192
199
grep "${fname}" "/SHA256SUMS.d/fuse-overlayfs-${FUSE_OVERLAYFS_VERSION}" | sha256sum -c && \
193
200
mv "${fname}" /out/bin/fuse-overlayfs && \
194
201
chmod +x /out/bin/fuse-overlayfs && \
195
202
echo "- fuse-overlayfs: ${FUSE_OVERLAYFS_VERSION}" >> /out/share/doc/nerdctl-full/README.md
196
203
ARG 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" && \
198
206
curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/containerd/fuse-overlayfs-snapshotter/releases/download/${CONTAINERD_FUSE_OVERLAYFS_VERSION}/${fname}" && \
199
207
grep "${fname}" "/SHA256SUMS.d/containerd-fuse-overlayfs-${CONTAINERD_FUSE_OVERLAYFS_VERSION}" | sha256sum -c && \
200
208
tar xzf "${fname}" -C /out/bin && \
201
209
rm -f "${fname}" && \
202
210
echo "- containerd-fuse-overlayfs: ${CONTAINERD_FUSE_OVERLAYFS_VERSION}" >> /out/share/doc/nerdctl-full/README.md
203
211
ARG TINI_VERSION
204
- RUN fname="tini-static-${TARGETARCH:-amd64}" && \
212
+ RUN TINI_VERSION=${TINI_VERSION/@BINARY}; \
213
+ fname="tini-static-${TARGETARCH:-amd64}" && \
205
214
curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/krallin/tini/releases/download/${TINI_VERSION}/${fname}" && \
206
215
grep "${fname}" "/SHA256SUMS.d/tini-${TINI_VERSION}" | sha256sum -c && \
207
216
cp -a "${fname}" /out/bin/tini && chmod +x /out/bin/tini && \
208
217
echo "- Tini: ${TINI_VERSION}" >> /out/share/doc/nerdctl-full/README.md
209
218
ARG 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" && \
211
221
curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/ktock/buildg/releases/download/${BUILDG_VERSION}/${fname}" && \
212
222
grep "${fname}" "/SHA256SUMS.d/buildg-${BUILDG_VERSION}" | sha256sum -c && \
213
223
tar xzf "${fname}" -C /out/bin && \
214
224
rm -f "${fname}" && \
215
225
echo "- buildg: ${BUILDG_VERSION}" >> /out/share/doc/nerdctl-full/README.md
216
226
ARG 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" && \
218
229
curl -o "${fname}" -fsSL --proto '=https' --tlsv1.2 "https://github.com/rootless-containers/rootlesskit/releases/download/${ROOTLESSKIT_VERSION}/${fname}" && \
219
230
grep "${fname}" "/SHA256SUMS.d/rootlesskit-${ROOTLESSKIT_VERSION}" | sha256sum -c && \
220
231
tar xzf "${fname}" -C /out/bin && \
@@ -223,10 +234,10 @@ RUN fname="rootlesskit-$(cat /target_uname_m).tar.gz" && \
223
234
224
235
RUN echo "" >> /out/share/doc/nerdctl-full/README.md && \
225
236
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 && \
228
239
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 && \
230
241
echo "- Other files: [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)" >> /out/share/doc/nerdctl-full/README.md
231
242
232
243
FROM build-dependencies AS build-full
0 commit comments