Skip to content

Commit 59a6269

Browse files
committed
change dockerfile to use distroless base image
1 parent 41bba8a commit 59a6269

File tree

3 files changed

+76
-10
lines changed

3 files changed

+76
-10
lines changed

Dockerfile

+38-9
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,44 @@ WORKDIR /go/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver
2323
ADD . .
2424
RUN GOARCH=$(echo $TARGETPLATFORM | cut -f2 -d '/') GCE_PD_CSI_STAGING_VERSION=$STAGINGVERSION make gce-pd-driver
2525

26-
# MAD HACKS: Build a version first so we can take the scsi_id bin and put it somewhere else in our real build
27-
FROM k8s.gcr.io/build-image/debian-base:buster-v1.9.0 as mad-hack
28-
RUN clean-install udev
29-
30-
# Start from Kubernetes Debian base
31-
FROM k8s.gcr.io/build-image/debian-base:buster-v1.9.0
32-
COPY --from=builder /go/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/bin/gce-pd-csi-driver /gce-pd-csi-driver
26+
# Start from Kubernetes Debian base.
27+
FROM k8s.gcr.io/build-image/debian-base:buster-v1.9.0 as debian
3328
# Install necessary dependencies
3429
RUN clean-install util-linux e2fsprogs mount ca-certificates udev xfsprogs
35-
COPY --from=mad-hack /lib/udev/scsi_id /lib/udev_containerized/scsi_id
30+
# Since we're leveraging apt to pull in dependencies, we use `gcr.io/distroless/base` because it includes glibc.
31+
FROM gcr.io/distroless/base-debian11
32+
# Copy necessary dependencies into distroless base.
33+
COPY --from=builder /go/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/bin/gce-pd-csi-driver /gce-pd-csi-driver
34+
COPY --from=debian /etc/mke2fs.conf /etc/mke2fs.conf
35+
COPY --from=debian /lib/udev/scsi_id /lib/udev_containerized/scsi_id
36+
COPY --from=debian /bin/mount /bin/mount
37+
COPY --from=debian /bin/umount /bin/umount
38+
COPY --from=debian /sbin/blkid /sbin/blkid
39+
COPY --from=debian /sbin/blockdev /sbin/blockdev
40+
COPY --from=debian /sbin/dumpe2fs /sbin/dumpe2fs
41+
COPY --from=debian /sbin/e* /sbin/
42+
COPY --from=debian /sbin/e2fsck /sbin/e2fsck
43+
COPY --from=debian /sbin/fsck /sbin/fsck
44+
COPY --from=debian /sbin/fsck* /sbin/
45+
COPY --from=debian /sbin/fsck.xfs /sbin/fsck.xfs
46+
COPY --from=debian /sbin/mke2fs /sbin/mke2fs
47+
COPY --from=debian /sbin/mkfs* /sbin/
48+
COPY --from=debian /sbin/resize2fs /sbin/resize2fs
49+
COPY --from=debian /sbin/xfs_repair /sbin/xfs_repair
50+
COPY --from=debian /usr/include/xfs /usr/include/xfs
51+
COPY --from=debian /usr/lib/xfsprogs/xfs* /usr/lib/xfsprogs/
52+
COPY --from=debian /usr/sbin/xfs* /usr/sbin/
53+
54+
# Copy x86 shared libraries into distroless base.
55+
COPY --from=debian /lib/x86_64-linux-gnu/libblkid.so.1 /lib/x86_64-linux-gnu/libblkid.so.1
56+
COPY --from=debian /lib/x86_64-linux-gnu/libcom_err.so.2 /lib/x86_64-linux-gnu/libcom_err.so.2
57+
COPY --from=debian /lib/x86_64-linux-gnu/libext2fs.so.2 /lib/x86_64-linux-gnu/libext2fs.so.2
58+
COPY --from=debian /lib/x86_64-linux-gnu/libe2p.so.2 /lib/x86_64-linux-gnu/libe2p.so.2
59+
COPY --from=debian /lib/x86_64-linux-gnu/libmount.so.1 /lib/x86_64-linux-gnu/libmount.so.1
60+
COPY --from=debian /lib/x86_64-linux-gnu/libpcre.so.3 /lib/x86_64-linux-gnu/libpcre.so.3
61+
COPY --from=debian /lib/x86_64-linux-gnu/libreadline.so.5 /lib/x86_64-linux-gnu/libreadline.so.5
62+
COPY --from=debian /lib/x86_64-linux-gnu/libselinux.so.1 /lib/x86_64-linux-gnu/libselinux.so.1
63+
COPY --from=debian /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.6
64+
COPY --from=debian /lib/x86_64-linux-gnu/libuuid.so.1 /lib/x86_64-linux-gnu/libuuid.so.1
3665

37-
ENTRYPOINT ["/gce-pd-csi-driver"]
66+
ENTRYPOINT ["/gce-pd-csi-driver"]

Dockerfile.arm64

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Copyright 2021 The Kubernetes Authors.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
ARG BUILDPLATFORM
16+
17+
FROM --platform=$BUILDPLATFORM golang:1.17.2 as builder
18+
19+
ARG STAGINGVERSION
20+
ARG TARGETPLATFORM
21+
22+
WORKDIR /go/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver
23+
ADD . .
24+
RUN GOARCH=$(echo $TARGETPLATFORM | cut -f2 -d '/') GCE_PD_CSI_STAGING_VERSION=$STAGINGVERSION make gce-pd-driver
25+
26+
# MAD HACKS: Build a version first so we can take the scsi_id bin and put it somewhere else in our real build
27+
FROM k8s.gcr.io/build-image/debian-base:buster-v1.9.0 as mad-hack
28+
RUN clean-install udev
29+
30+
# Start from Kubernetes Debian base
31+
FROM k8s.gcr.io/build-image/debian-base:buster-v1.9.0
32+
COPY --from=builder /go/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/bin/gce-pd-csi-driver /gce-pd-csi-driver
33+
# Install necessary dependencies
34+
RUN clean-install util-linux e2fsprogs mount ca-certificates udev xfsprogs
35+
COPY --from=mad-hack /lib/udev/scsi_id /lib/udev_containerized/scsi_id
36+
37+
ENTRYPOINT ["/gce-pd-csi-driver"]

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ build-and-push-container-linux-amd64: require-GCE_PD_CSI_STAGING_IMAGE init-buil
9696
--build-arg STAGINGVERSION=$(STAGINGVERSION) --push .
9797

9898
build-and-push-container-linux-arm64: require-GCE_PD_CSI_STAGING_IMAGE init-buildx
99-
$(DOCKER) buildx build --platform=linux/arm64 \
99+
$(DOCKER) buildx build --file=Dockerfile.arm64 --platform=linux/arm64 \
100100
-t $(STAGINGIMAGE):$(STAGINGVERSION)_linux_arm64 \
101101
--build-arg BUILDPLATFORM=linux \
102102
--build-arg STAGINGVERSION=$(STAGINGVERSION) --push .

0 commit comments

Comments
 (0)