DockerState

Home › Methodology

Methodology

Every number on this site is measured by an automated pipeline and dated. Nothing is typed in by hand. This page says exactly where each one comes from.

What we measure

57 tags of 25 official images (the library/ namespace on Docker Hub), chosen as popular tags across language runtimes, databases, web servers and base operating systems. The list is fixed in the site's configuration and grows slowly.

Sizes and layers per platform

Source: the public Docker Hub API (/v2/repositories/library/<image>/tags/<tag> and its /images list), checked daily; last checked 2026-11-01. For each platform it reports the compressed size of all layers (the amount docker pull downloads, before deduplication against layers you already have), the layer list with the build step that made each layer, the digest and the push date. “Layers” counts only layers that add files; metadata-only steps such as ENV or CMD are excluded. “Updated” is the tag's last push date on Docker Hub.

Unpacked size, files and directories

Measured by DockerState, for linux/amd64 only. We pull the image by its exact amd64 digest, export it with docker save, then read every layer: unpacked size is the sum of each layer's decompressed tar stream, which is close to what docker image ls reports with the classic storage driver. Files and where the bytes go come from replaying the layers in order, applying deletions (whiteouts), and summing regular file sizes in the final filesystem. Images are re-measured only when their amd64 digest changes; the date of the measurement is shown on each page.

Docker Hub's website shows the compressed size. We checked our compressed totals against it: they are the same number, from the same API.

Base OS and packages

From a software bill of materials (CycloneDX) generated by Trivy 0.76.1 from the exported image. The base OS is what Trivy reads from the OS release files; packages are those listed by the OS package database (dpkg, apk, rpm) plus language packages Trivy recognises (pip, npm, Go binaries, gems, crates, composer). Java archives (.jar, .war, .ear) are not analysed: identifying them needs a separate 1 GB lookup database. The OS packages of Java images are still scanned, but libraries bundled as jars are not counted. Images with no package database, such as BusyBox, show none; that does not mean they contain no software.

Known vulnerabilities

Every day we download a fresh Trivy vulnerability database and re-scan each stored SBOM against it, so counts change as new vulnerabilities are published and fixed, even when the image itself has not changed. Current database: 2026-11-01. Counts are findings: one vulnerability ID in one installed package. Severity is the one Trivy assigns, which prefers the distribution's own rating over NVD's. “With a fix” means a fixed version of the package exists upstream.

Limits. A scanner finds known vulnerabilities in recognised packages; it does not prove an image safe. Many distribution findings are low-risk or marked “will not fix”. Use these numbers to compare images and to see what a rebuild would fix, not as a security audit.

How we checked the numbers

Schedule

Sources and licences

DataSourceTerms
Tag sizes, layers, digests, push dates, pull countsDocker Hub public APIFactual metadata; no README text or logos are copied
Unpacked size, files, directories, image configMeasured by DockerState from the imagesOur own measurements
Packages, base OS, vulnerabilitiesTrivy (aquasecurity/trivy) and trivy-dbApache License 2.0; the database aggregates NVD (public domain), GitHub Advisory Database (CC BY 4.0) and distribution security trackers

The data behind the compare tool is published as /data/tags.json.