May 19, 2025·6 min read·engineeringdockersupply-chainimages

Docker Hardened Images make base image maintenance a supplied service

Docker's hardened image catalog combines minimal runtime contents with maintained Debian and Alpine variants and build provenance.

Removing a package from a runtime image eliminates the need to carry that package's vulnerabilities into the deployment. Keeping the remaining packages current is a different responsibility. Docker Hardened Images combines those responsibilities in a maintained catalog, with Docker supplying both the reduced runtime and a process for publishing patched replacements.

The May 19 launch announcement describes Debian and Alpine variants, automated rebuilding, and fresh attestations for updated images. Its practical proposition concerns the work that continues after someone has made an image small. A runtime still contains dependencies, and those dependencies still change.

I prefer a multi-stage build that ends with a static Go binary in a scratch image when the application permits it. That preference makes the catalog interesting for the applications that need a runtime distribution. Reducing the contents is useful, but a supplied maintenance process addresses work that a small initial image cannot finish.

Minimal contents reduce a specific maintenance burden

Docker says Hardened Images follows a distroless philosophy. The announcement identifies shells, package managers, and debugging tools as examples of components removed from production images. The intended result contains the runtime dependencies the application needs without the general-purpose environment that often accompanies them.

That changes what an application can assume is present. A Dockerfile or startup command that depends on a shell needs to account for the contents of its selected runtime. The absence is part of the product's design, so restoring every familiar utility would change the reason for choosing the reduced image.

The maintenance benefit follows from the dependency set. A component excluded from the runtime does not need a runtime patch there. The remaining components still do. Minimality therefore reduces the scope of maintenance without proving that the application has no vulnerabilities.

Docker's announcement advertises a reduction in attack surface of up to 95 percent. That is a vendor claim about its offering, not a universal measurement for every application. A percentage does not identify which packages a particular service needs or establish whether its own code handles requests safely.

The internal Node example in the announcement is more concrete about what Docker measured. Docker reports reducing package count by over 98 percent and reaching zero detected vulnerabilities for that internal replacement. Those results describe Docker's example. They do not establish the same outcome for a different application with a different dependency set.

This matters because a scan result and a runtime's contents answer different questions. A package inventory describes what the image includes. A vulnerability result depends on known findings associated with that inventory. Removing unnecessary packages reduces one source of future findings, while updating necessary ones addresses defects in the components that remain.

Debian and Alpine preserve a migration option

The launch supports familiar Debian and Alpine variants. Docker presents that choice as a way to reduce the amount of reworking needed when moving existing applications. Retaining a distribution family can preserve useful assumptions about the runtime environment while Docker changes the supplied package set.

The announcement says a migration can be as simple as changing a Dockerfile line. The qualification matters. A base image substitution describes the entry point for the change, but the application still depends on what its runtime contains. A service that needs files omitted from the new image has more work than a service whose requirements already match it.

Docker also describes customization for certificates, packages, scripts, and configuration files. This is an acknowledgement that a maintained base and an application-specific image have different jobs. The base supplies a maintained starting point, while the application still needs its own necessary additions.

Customization creates an accounting question. A certificate file required for a deployment has a purpose even though it was absent from the generic base. A package added for convenience also becomes part of the resulting runtime. The reduced base does not make every later addition necessary or automatically maintained by the same process.

For my use of Docker, that distinction is central. A build definition should make the application's inputs inspectable. A maintained base can remove repeated work, but the derived image remains a composition whose added contents need an identified owner.

Distribution familiarity also has limits. Supporting Debian does not mean including every package in a general Debian image. The offering explicitly combines distribution variants with a reduced runtime philosophy. Compatibility should therefore be understood in terms of the selected runtime's actual requirements and contents.

Rebuilding the base does not replace a deployed application

Docker describes monitoring upstream sources, operating system packages, and vulnerability information across dependencies. Updates trigger rebuilds, testing, and publication with new attestations. The announcement promises remediation of Critical and High severity CVEs within seven days, backed by an enterprise service level agreement.

That is a concrete commitment about supplied images. It should not be interpreted as a mechanism that rewrites a consumer's existing application image or running process. Publishing a replacement artifact makes an update available. The downstream build and deployment still need to select that replacement for it to affect the application.

The difference is visible in the artifact relationship. A derived application image has already been built from a particular set of inputs. A later base publication describes another available input. Applying the repair requires producing and deploying an application artifact that uses the repaired content.

This is a useful division of responsibility when the supplied service is clear. Docker maintains the catalog and publishes replacements. The consumer controls its own application release. A patch deadline for the first responsibility should not be reported as evidence that the second has already happened.

The announcement also says essential components may be built directly from source to accelerate remediation. That can reduce dependence on the timing of an upstream package publication. It makes the build process and its provenance more relevant, because the consumer needs evidence about how the supplied component became the distributed image.

Provenance describes construction, not application correctness

Docker says its rebuild process uses a SLSA Build Level 3 compliant build system. The SLSA 1.0 level definitions explain the meaning of that claim. The build track concerns the trustworthiness of provenance and protection against tampering during artifact construction.

Provenance records who built an artifact, how it was built, and its inputs. At higher levels, controls make that information harder to forge and protect the build process. That is relevant to an image supplier because consumers need to distinguish the intended build from an artifact merely uploaded under a familiar name.

Build Level 3 adds controls intended to prevent build runs from influencing one another. It also protects the secret material used to sign provenance from user-defined build steps. These requirements concern the integrity of the build platform and its evidence.

The specification connects those controls to downstream verification. Consumers compare actual provenance with expectations for the package. Merely possessing an attestation is different from establishing that its builder and inputs are the ones the consumer accepts.

That distinction prevents a common overstatement of supply-chain metadata. Provenance can support a claim about the origin and construction of an image. It does not prove that every source component is free of defects or that an application's configuration is suitable for its deployment.

For Hardened Images, the maintenance process and the provenance serve related purposes. Rebuilding changes the artifact to include updated content. New attestations describe the resulting build. A consumer can then connect the replacement to its expected supplier and process instead of treating a tag's appearance as the entire verification story.

The derived image remains the useful unit of analysis

The catalog's value is strongest where an application needs a supported runtime and its maintainers otherwise repeat the same base-image work. Minimal contents reduce unnecessary dependencies, while a supplied patch process addresses the necessary ones. Debian and Alpine variants provide a migration route within familiar distribution families.

The resulting application still has its own contents and release process. Added files need a reason to exist, and added dependencies need maintenance. The supplier's evidence should travel into an assessment of the derived image rather than being treated as a property that every later build step automatically inherits.

That leaves a concrete way to understand the launch. Docker offers maintained runtime inputs and evidence about their construction. The application build selects those inputs, adds its required content, and produces the artifact that deployment will actually run. A patched catalog image has practical effect when that relationship results in a new application artifact using the patched content.