diff --git a/containers/Dockerfile.plugin b/containers/Dockerfile.plugin index b5b4cea..517bbec 100644 --- a/containers/Dockerfile.plugin +++ b/containers/Dockerfile.plugin @@ -27,6 +27,20 @@ RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache # Use distroless as minimal base image to package the manager binary # Refer to https://github.com/GoogleContainerTools/distroless for more details FROM gcr.io/distroless/static:nonroot + +ENV SUMMARY="CloudNativePG Barman plugin" \ + DESCRIPTION="Container image that provides the barman-cloud plugin" \ + +LABEL summary="$SUMMARY" \ + description="$DESCRIPTION" \ + io.k8s.display-name="$SUMMARY" \ + io.k8s.description="$DESCRIPTION" \ + name="CloudNativePG Barman plugin" \ + vendor="CloudNativePG Contributors" \ + url="https://cloudnative-pg.io/" \ + version="$VERSION" \ + release="1" + WORKDIR / COPY --from=builder /workspace/manager . USER 65532:65532 diff --git a/containers/Dockerfile.sidecar b/containers/Dockerfile.sidecar index 98ee93b..8d00c12 100644 --- a/containers/Dockerfile.sidecar +++ b/containers/Dockerfile.sidecar @@ -1,3 +1,13 @@ +# Sidecar +# The container needs to provides and build two components: +# * barman-cloud +# * instance plugin +# Both components are built before going into a distroless container + +# Build barman-cloud +# pip will build everything inside /usr/ since this is the case +# we should build and then copy every file into a destination that will +# then copy into the distroless container FROM python:3.12.7-slim AS pythonbuilder RUN apt-get update && \ apt-get install -y postgresql-common build-essential && \ @@ -6,11 +16,12 @@ RUN apt-get update && \ pip install barman[azure,cloud,google,snappy]==3.11.1 setuptools # Prepare a new /usr/ directory with the files we'll need in the final image RUN mkdir /new-usr/ && \ - cp -r --parents /usr/local/lib/ /new-usr/ && \ - cp -r --parents /usr/lib/*-linux-gnu/ /new-usr/ && \ - cp -r --parents /usr/local/bin/ /new-usr/ - + cp -r --parents /usr/local/lib/ /usr/lib/*-linux-gnu/ \ + /new-usr/ +# Build instance +# This step builds a simple instance app that will manage and handle +# the barman-cloud commands inside the sidecar FROM --platform=$BUILDPLATFORM golang:1.23.1 AS gobuilder ENV CGO_ENABLED=0 COPY .. /src @@ -19,8 +30,24 @@ ARG TARGETARCH RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build \ GOOS=$TARGETOS GOARCH=$TARGETARCH go build -C /src -o /build/instance /src/cmd/instance/main.go - +# Joint process +# Now we put everything that was build from the origin into our +# distroless container FROM gcr.io/distroless/python3:debug + +ENV SUMMARY="CloudNativePG Barman plugin" \ + DESCRIPTION="Container image that provides the barman-cloud sidecar" \ + +LABEL summary="$SUMMARY" \ + description="$DESCRIPTION" \ + io.k8s.display-name="$SUMMARY" \ + io.k8s.description="$DESCRIPTION" \ + name="CloudNativePG Barman plugin sidecar" \ + vendor="CloudNativePG Contributors" \ + url="https://cloudnative-pg.io/" \ + version="$VERSION" \ + release="1" + COPY --from=pythonbuilder /new-usr/* /usr/ COPY --from=gobuilder /build/instance /usr/local/bin/instance USER 26:26