Getting Started
ARMORRED provides drop-in replacements for popular container images with security hardening applied at build time and supply chain verification built in. This guide walks through pulling, verifying, and running your first ARMORRED image.
Prerequisites
Before using ARMORRED images, ensure you have:
- Container runtime: Podman (recommended) or Docker
- cosign (optional but recommended): For verifying image signatures
- Basic understanding: Familiarity with container security concepts
Install cosign for signature verification:
Choosing an Image Tier
ARMORRED images come in two security tiers:
- Hardened: Guaranteed drop-in replacement for the upstream image. All upstream features retained. Start here.
- Locked: Not guaranteed to be a 100% drop-in replacement. Drops some rarely-used features for a more aggressive hardening posture.
See the Hardened vs Locked page for detailed comparisons and guidance on which tier to choose.
Pulling an Image
ARMORRED images are hosted on GitHub Container Registry (ghcr.io). Pull the nginx hardened image:
Available images:
| Image | Registry Path |
|---|---|
| NGINX 1.26 (hardened) | ghcr.io/armorred/nginx:1.26-hardened |
| NGINX 1.26 (locked) | ghcr.io/armorred/nginx:1.26-locked |
| MariaDB 11.4 (hardened) | ghcr.io/armorred/mariadb:11.4-hardened |
| MariaDB 11.4 (locked) | ghcr.io/armorred/mariadb:11.4-locked |
Use the latest alias to automatically pull the most recent version:
Verifying Image Signatures
ARMORRED images are signed with Sigstore cosign. The public key is available at https://armorred.org/cosign.pub. Verify the signature before running:
If verification fails, do not run the image. Signature verification ensures:
- The image was signed by the ARMORRED project's private key
- The image has not been tampered with since publication
Running the Image
ARMORRED images are configured to listen on unprivileged port 8080 by default, enabling non-root execution without requiring NET_BIND_SERVICE capability. Start nginx:
The --tmpfs mounts provide writable directories for nginx temporary files and logs while keeping the root filesystem read-only capable.
The hardened image runs identically to upstream nginx but with:
- 87% fewer components (19 vs 150 packages)
- 38% smaller size (121 MB vs 196 MB)
- 99% fewer vulnerabilities (1 vs 117 CVEs)
- Binary hardening (PIE, RELRO, stack canaries, SafeStack)
Inspecting the Image
Check which tier you are running:
View the complete SBOM (Software Bill of Materials):
For a comprehensive guide to working with SBOMs, see Understanding SBOMs.
Comparing with Upstream
To understand the impact of hardening, compare the ARMORRED image against the official upstream image:
Check binary hardening features:
Compare vulnerabilities using Grype:
Next Steps
- Read Security Overview to understand ARMORRED's security model
- Learn about Hardened vs Locked tiers and when to use each
- Explore Methodology to see how images are built and scanned
- Review Build-time Protections for details on binary hardening
- See Runtime Protections for deployment best practices
For production deployments, implement runtime security controls (capabilities, seccomp, read-only filesystems) as described in the Runtime Protections guide.