System components
Registry server
Implements Docker Registry API v2 for push, pull, and manifest operations. Handles blob uploads, content addressing, and tag management.
Scan worker
Background service that analyzes pushed images for vulnerabilities using Trivy. Stores results alongside artifact metadata.
GC worker
Reclaims storage from deleted repositories, unreferenced blobs, and abandoned uploads through mark-and-sweep garbage collection.
IAM integration
Repository-level access control through Platform’s authorization system. Supports viewer, editor, and owner roles.
Storage architecture
Artifact Store uses a content-addressable storage model. Blobs (image layers, configs) are stored by their SHA256 digest, enabling automatic deduplication across repositories.Blob storage
All blobs persist to DFS under a canonical path structure:Repository metadata
Each repository maintains metadata in FoundationDB:- Manifests: OCI image manifests indexed by digest and tag
- Blob references: Links between repository and shared blobs
- Tags: Named references to manifest digests
Vulnerability scanning
Artifact Store integrates with Trivy for container image vulnerability scanning. When enabled, images are analyzed automatically after push.Scan-on-push
The registry server enqueues a scan task whenever a manifest is pushed. The scan worker picks up tasks from a distributed queue and processes them in order.Scan process
- Scan worker pulls the image from the registry using service account credentials
- Trivy analyzes layers and reports vulnerabilities
- Results are converted to Parquet format and stored in DFS
- Vulnerability statistics update on the manifest metadata
Vulnerability statistics
Each scanned image includes aggregated counts:| Severity | Description |
|---|---|
| Critical | Vulnerabilities requiring immediate attention |
| Medium/High | Significant vulnerabilities |
| Low/Unknown | Minor or unclassified vulnerabilities |
Garbage collection
Artifact Store runs continuous garbage collection to reclaim storage from deleted content.What gets collected
| Content type | Trigger | Grace period |
|---|---|---|
| Orphaned blobs | No manifest references | 24 hours |
| Deleted repositories | Repository deletion | Immediate |
| Abandoned uploads | No activity | 1 hour |
| Expired uploads | Upload timeout | Configurable |
Mark-and-sweep process
The GC worker operates in two phases: Mark phase scans repository blob references and identifies digests with zero live references. These are marked as pending deletion with a timestamp. Sweep phase processes pending deletions that have exceeded the grace period. It removes repository-scoped links first, then deletes the canonical blob only when no repository references remain. This two-phase approach prevents accidental deletion of blobs during concurrent uploads.Access control
Artifact Store inherits permissions from Platform’s IAM system. Roles can be assigned at organization, project, or repository level.Repository roles
| Role | Pull | Push | Delete | Manage |
|---|---|---|---|---|
viewer | ✓ | |||
editor | ✓ | ✓ | ||
owner | ✓ | ✓ | ✓ | ✓ |
artifact_store_editor on a project has editor access to all repositories in that project.
Authentication
The registry accepts Docker credentials in two forms:- User credentials: Username and password authenticated against Platform
- Service account keys: JSON key files for CI/CD automation
Configuration
Registry server
| Variable | Description | Required |
|---|---|---|
ARTIFACT_STORE_ADDRESS | Bind address for the server | No (default: 0.0.0.0:7111) |
ARTIFACT_STORE_DIRECTORY | FoundationDB directory for registry metadata | No (default: registry) |
ARES_CLIENT_ADDRESS | Address of the DFS metadata service | No (default: http://localhost:9182) |
ARTS_SCAN_ON_PUSH | Enable vulnerability scanning on push | No (default: true) |
ARTS_SCAN_QUEUE | Queue name for scan tasks | No (default: arts-scan) |
DEBUG | Enable debug logging | No (default: false) |
Scan worker
| Variable | Description | Required |
|---|---|---|
FDB_DIRECTORY | FoundationDB directory for registry metadata | No (default: registry) |
ARTS_METADATA_DIRECTORY | FoundationDB directory for Platform metadata | No (default: topaz) |
ARES_CLIENT_ADDRESS | Address of the DFS metadata service | No (default: http://localhost:9182) |
ARTS_SCAN_QUEUE | Queue name to consume scan tasks from | No (default: arts-scan) |
ARTS_TRIVY_PATH | Path to Trivy binary | No (default: trivy) |
ARTS_REGISTRY_HOST | Registry hostname for Trivy to pull from | No (default: localhost:7111) |
ARTS_SCAN_BATCH_SIZE | Images to scan per batch | No (default: 8) |
ARTS_SCAN_RESCHEDULE_SECS | Interval for re-scanning repositories | No (default: 3600) |
GC worker
| Variable | Description | Required |
|---|---|---|
FDB_DIRECTORY | FoundationDB directory for registry metadata | No (default: registry) |
ARES_CLIENT_ADDRESS | Address of the DFS metadata service | No (default: http://localhost:9182) |
ARTS_GC_REPOSITORY_QUEUE | Queue for repository GC tasks | No (default: arts-gc) |
ARTS_GC_CANONICAL_QUEUE | Queue for canonical blob GC | No (default: arts-gc-canonical) |
ARTS_GC_BATCH_SIZE | Entries to process per batch | No (default: 256) |
ARTS_GC_PENDING_GRACE_SECS | Grace period before deletion | No (default: 86400) |
Deployment
Requirements
Artifact Store requires:- Access to a FoundationDB cluster
- Running DFS deployment (for blob storage)
- Running Platform deployment (for IAM)
- Trivy binary (for vulnerability scanning)
Service topology
A complete Artifact Store deployment includes:- Registry server: Handles Docker API requests
- Scan worker: Processes vulnerability scan queue (optional but recommended)
- GC worker: Maintains storage efficiency (required for production)
Trivy setup
The scan worker requires Trivy installed and accessible. It uses Trivy in client mode, pulling images from the registry for analysis. Install Trivy on scan worker nodes:Network considerations
The registry server needs to be accessible to:- Docker clients pushing and pulling images
- Scan worker for vulnerability analysis
- Platform UI for repository browsing