Ready to Work Together?
Let's discuss how our expertise can help transform your business.
Alex Podobnik
·
Mar 26, 2026
When developers choose base images freely, the result is always the same: a fragmented estate of ubuntu:latest, python:3.9, node:18, and similar variants sitting months or years behind current releases. Each one accumulates CVEs silently. No one owns the update cycle and security debt compounds.
At NextLink Labs, we recognized that base image maintenance is undifferentiated work and it doesn't make our clients' infrastructure better, it just keeps the lights on. The answer was to stop doing it ourselves.
We consume hardened, minimal base images from maintained upstream sources rather than building our own. This gives us three things simultaneously: a smaller attack surface, a reduced CVE burden, and zero internal maintenance overhead.
Docker maintains and publishes a library of hardened images through Docker Official Images and Docker Verified Publishers on Docker Hub. For higher assurance workloads, Docker also offers Docker Hardened Images (DHI) which is a commercially supported catalog of minimal, distroless-style images built to strict CIS benchmarks with signed provenance and guaranteed patch SLAs. These sit alongside community-maintained sources.
Hardened images differ from standard base images in several concrete ways:
The net effect is that a hardened base image starts closer to CIS Docker Benchmark Level 1 compliance than a standard image ends up after manual hardening.
We treat base image selection as an engineering standard, not a developer preference. In practice, this means migrating away from general-purpose images like node:20-slim to Docker Hardened Images using a multi-stage build pattern, a build stage for compilation and dependency installation, and a minimal runtime stage with no shell, no package manager, and a non-root user by default.
Pick your runtime from the approved image catalog, swap your FROM directive to the appropriate DHI base, and split your Dockerfile into build and runtime stages if it isn't already. Test the build locally, then push and the pipeline handles the rest.
If your service has any of the following, flag it with the platform team before migrating:
For straightforward stateless services the process typically takes under two hours. Once merged, the nightly pipeline automatically picks up future base image updates, no further action needed from the service team.
Full image catalog: https://hub.docker.com/hardened-images/catalog
The following example shows a Node.js service before and after DHI migration:
Before (Current Dockerfile):
After (DHI Multi-Stage):
Key changes: split into builder and runtime stages, -dev variant for build tooling, -runtime variant for production, explicit non-root USER 1001, and proper file ownership via --chown.
Once the Dockerfile is updated, our CI pipeline takes over. All FROM directives are validated against an approved image allowlist before any application code is compiled. Every built image is scanned with Docker Scout. Builds fail on CRITICAL CVEs and a signed SBOM is attached to every pipeline run. In Kubernetes environments, OPA/Kyverno admission controllers ensure only signed, DHI-based images can reach production namespaces, with Falco providing runtime behavioral monitoring as a final layer.
The following GitLab CI job definition illustrates what this implementation looks like:
Since no shell is available, this is how we would debug if needed:
The key advantage of using Docker Hardened Images is that Docker handles the CVE patching cycle for us. When a vulnerability is disclosed in OpenSSL, glibc, or any base image dependency, Docker patches and republishes the affected DHI image. We rebuild our application layer on top of the new digest which means no internal triage, no manual base image updates.
We automate this with a nightly pipeline that scans our current base image digests against updated CVE feeds. When new HIGH or CRITICAL CVEs appear in a base we use, the pipeline triggers an automated application image rebuild and opens a merge request for review. Mean base image age stays in the low double digits in days rather than months.
The tradeoff is straightforward: we give up free-form base image customization, and in return we get a continuously patched foundation without dedicating any engineering time to maintaining it.
Without DHI, the typical failure mode is silent accumulation. A developer picks python:3.9 in 2022 and two years later it's still in production carrying dozens of unpatched CVEs because no one owns the update cycle and touching it risks breaking something. Multiply that across hundreds of images and the security posture degrades without anyone noticing.
DHI breaks that cycle at the source. Because Docker maintains and refreshes the base images, the base is never the problem. Engineering attention stays where it belongs: application dependencies.
Hardened base images are not a security project, they are an engineering efficiency decision. By consuming well-maintained, minimal upstream bases rather than maintaining our own, NextLink Labs reduces its CVE exposure, satisfies compliance requirements as a side effect of normal build processes, and frees engineering time for work that actually differentiates our client delivery.
Author at NextLink Labs
Transform your security event monitoring from reactive alerts to proactive threat detection with structured strategies for effective DevSecOps maturity.
Jordan Saunders
·
Mar 24, 2026
Ensure your applications are fast, reliable, and user-centric with our strategic guide to Application Performance Monitoring (APM). Learn how to move beyond basic metrics to drive real business value, optimize performance, and enhance digital experiences.
Jordan Saunders
·
Mar 13, 2026
DevOps
Learn how to implement effective training and knowledge sharing strategies for GitLab migration. Ensure your team is well-equipped to leverage GitLab’s features.
Jay Korpi
·
Oct 9, 2024
Let's discuss how our expertise can help transform your business.