Wolfi ● Tiny Linux Distribution ● "Undistro" because it doesn't have stuff that normally goes into a Linux distribution (kernel, man pages, a bunch of other packages that don't make sense for containers) ● Based on apk (the Alpine package manager) ● Primarily GLIB-C (but MUSL is on the roadmap) ● Packages defined as YAML and built with melange
melange ● Declarative apk builder tool ● Part of the building toolkit behind Wolfi / Chainguard Images ● Build pipelines are defined in YAML files ● Multi-architecture by default (via QUEMU) ● Platform-agnostic builds via Docker + apko image
apko ● Declarative OCI image builder tool based on apk ● Part of the building toolkit behind Wolfi / Chainguard Images ● Images are defined in YAML files ● Builds are fully reproducible ● Automatically generates SBOMs for every image ● Platform-agnostic builds via Docker + apko image
Chainguard Images ● Curated OCI images built with apko and melange ● Most based on Wolfi, some still migrating from Alpine as we build more package dependencies ● Nightly built for several platforms ● Zero CVEs goal ● High quality SBOMs ● Signed with Sigstore
The distroless philosophy ● Minimalist container images with only what's absolutely necessary to build or execute your application ● Popular base images are full of software that only makes sense on bare-metal ● No need for package managers or interactive shells on production images ● Less dependencies = smaller attack surface, less CVEs
Custom distroless images: before / after ● php:8.1-cli (Debian-based, official) ● Base image total size: 484MB ● Total CVEs: 386 ● minicli/php81 (alpine-based, built with apko) ● Base image total size: 48MB ● Total CVEs: 0
Building the image with apko via Docker $ docker run --rm -v ${PWD}:/work cgr.dev/chainguard/apko build \ apko.yaml apko-php:test apko-php.tar Testing the image with Docker $ docker load < alpine-test.tar $ docker run -it alpine-base:test
Dynacover base image: before / after ● Based on php:7.4-cli ● Base image total size: 589MB ● Total CVEs: 331 ● Distroless based on Alpine ● Base image total size: 48MB ● Total CVEs: 0
Resources to Learn More ● Chainguard Academy ● Wolfi documentation ● melange + apko tutorial on Chainguard Academy ● Chainguard Images documentation ● apko on GitHub ● Troubleshooting apko builds