feat(docker): Docker disk is recorded over time per host, the Disk page shows each host's growth and folds images under their repository, and the overview has one disk line per host (#5304–#5306)
- #5304 "Docker disk totals recorded over time per host, with a growth chart and alertable metrics" - #5305 "Disk page: images grouped by repository, versions folded under it" - #5306 "Docker overview: one disk line per host linking to the Disk page" Each `docker system df` report is now also recorded as metrics, with the host as the resource: disk_total_bytes, its parts, and disk_reclaimable_bytes. An alert rule can watch them. The Disk page starts with the hosts side by side, showing how much each grew over the selected range with a line of it, then gives each host its own section. An image's versions fold under its repository, which is charged only for the layers its versions don't share. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -208,6 +208,12 @@ METRICS: dict[str, tuple[str, str]] = {
|
||||
"cpu_pct": ("CPU", "CPU in use; for a container, 100% is one core"),
|
||||
"mem_pct": ("Memory (% of limit)", "memory in use, against the container's limit or the host's RAM"),
|
||||
"restart_count": ("Restarts", "times the container has restarted, in total"),
|
||||
"disk_total_bytes": ("Docker disk use", "everything Docker keeps on the host (resource: the host)"),
|
||||
"disk_images_bytes": ("Docker images", "space Docker's images take on the host"),
|
||||
"disk_containers_bytes": ("Container files", "what containers wrote on top of their images"),
|
||||
"disk_volumes_bytes": ("Docker volumes", "space Docker's volumes take on the host"),
|
||||
"disk_build_cache_bytes": ("Docker build cache", "left by docker build; safe to clear"),
|
||||
"disk_reclaimable_bytes": ("Reclaimable by Docker", "held by images no container uses"),
|
||||
"mem_used_pct": ("Memory used", "memory in use"),
|
||||
"mem_available_bytes": ("Memory available", "memory free for new work"),
|
||||
"swap_used_bytes": ("Swap used", "memory paged out to disk"),
|
||||
|
||||
@@ -224,6 +224,19 @@ strong, b, th { font-weight: 500; }
|
||||
.node-tasks th, .node-tasks td { padding: 0.35rem 0.5rem; font-size: 0.82rem; }
|
||||
.node-tasks .cell-name { max-width: 12rem; }
|
||||
.node-tasks .cell-name > a { display: inline-block; max-width: 100%; vertical-align: bottom; }
|
||||
/* The Docker overview's one line per host of disk (#5306). */
|
||||
.docker-disk-line { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.35rem 1.25rem; margin: 0 0 1rem; font-size: 0.85rem; }
|
||||
.docker-disk-host { white-space: nowrap; }
|
||||
/* The Disk page (#5304, #5305): a section per host; images by repository,
|
||||
each repository's versions folded under it. */
|
||||
.disk-host { margin: 2rem 0; }
|
||||
.disk-host-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.6rem; margin: 0 0 0.75rem; font-family: var(--fs-font-body); font-size: 1.05rem; font-weight: 500; }
|
||||
.disk-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; margin-bottom: 1rem; }
|
||||
.disk-actions form { margin: 0; }
|
||||
.image-repos .cell-name { max-width: 28rem; }
|
||||
.image-repos summary { cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.image-repos details[open] summary { margin-bottom: 0.5rem; }
|
||||
.image-versions th, .image-versions td { padding: 0.3rem 0.5rem; font-size: 0.8rem; }
|
||||
|
||||
/* Forms */
|
||||
.form-group { margin-bottom: 1rem; }
|
||||
|
||||
Reference in New Issue
Block a user