# Docker Desktop benchmark rerun, October 2026

Run on 2026-10-05, 22:35 to 23:05 UTC, by `run.sh`, `pgbench-rerun.sh` and `pgbench-rerun2.sh` in this folder. Raw, unedited outputs are the `.txt` files beside this summary; `adaptations.txt` lists every departure from the 2023 commands; `run.log` is the timeline.

## Machine

| | |
|---|---|
| Mac | Apple M4 Pro, 14 cores, 48 GiB |
| macOS | 26.5.2 (25F84) |
| Docker Desktop | 4.90.0 (238679), engine 29.7.2, CLI plugin v0.4.3, Linux kernel 7.0.12-linuxkit, aarch64 |
| VM resources | 14 CPUs, 7.748 GiB memory (from `docker info`) |
| File-sharing implementation | **not readable from the terminal** (the settings store under `~/Library/Group Containers/group.com.docker/` is blocked by macOS TCC for this shell). Docker Desktop 4.90 defaults to VirtioFS; confirm in Settings → General and correct this line if it differs. Not switched during the run. |
| Other load | the servicedesk Compose stack (5 containers) was running throughout and came back after each engine restart |

## Results (median of 3, with range)

| Benchmark | 2026 result | Raw file | 2023 figure it replaces, and its source |
|---|---|---|---|
| Container start, `hyperfine -i -p 'docker stop ubuntu \|\| :' 'docker run -it --rm ubuntu echo'` | **16.2 ms** mean (attempts 15.9 / 16.2 / 16.5 ms; min–max across runs 13.4–24.6 ms; 68–81 runs each) | hyperfine.txt | 44.3 / 46.3 / 46.5 ms on Docker Desktop 4.22, 56.7–59.8 ms on 4.11: Ajeet Singh Raina, Collabnix, Jan 2024 |
| `docker cp` of a 1 GB file out of a bind-mounted directory | **5.27 s** real (5.24–5.32 s) | copy-1gb.txt | 6.750 s total on 4.22: Ajeet Singh Raina, Collabnix, June 2023 |
| `docker cp` of a 10 GB file, same setup | **54.2 s** (52.9–54.6 s) | copy-10gb.txt | 1 min 04–06 s with VirtioFS, 5 min 02–11 s without, on 4.22: Ajeet Singh Raina, Collabnix, Jan 2024 |
| Redis clean build over a bind mount, `time make` inside ubuntu | **1 min 52.6 s** (1 min 51.6 – 1 min 53.1 s) | redis-build.txt | "seven minutes on 4.20 to about two minutes on 4.21": Docker, 4.21 release post, July 2023; Docker's chart in "Unleash Docker Desktop 4.22" |
| pgbench, scale 10, 10 clients × 10 transactions | **8,470 tps** (8,313–8,635; latency 1.16–1.20 ms; PostgreSQL 18.6; attempts 1–6 failed to start, see adaptations) | pgbench.txt | 1000 tps (4.11.1) vs 2600 tps (4.22) in the 2023 post, no public source; removed from the post |
| iperf3 container → container | **95.6 Gbit/s** (95.0–96.4) | iperf3-container-to-container.txt | 2023 post's per-platform table, no public source; removed |
| iperf3 container → host (`host.docker.internal`) | **8.73 Gbit/s** (8.71–8.74; attempt 1 failed, server not yet listening, attempt 4 added) | iperf3-container-to-host.txt | 3.5 → 19 Gbit/s on a first-generation M1 Mac mini: Docker, "Unleash Docker Desktop 4.22", Aug 2023 |
| iperf3 host → container (published port) | **10.5 Gbit/s** (10.4–10.6) | iperf3-host-to-container.txt | 2023 post's table, no public source; removed |
| Engine restart, `docker desktop stop` → `start` → first `docker info` | **2.27 s** (2.24–2.37 s) | startup.txt | "starts in four seconds on Apple Silicon": Docker, 4.21 release post. Note: this is an engine restart with the app already open, not a cold launch of the application |

## What the comparison can and cannot say

- The machine is different (M4 Pro, 48 GiB against Ajeet's 2023 Mac and Docker's M1 Mac mini), so the gaps are machine plus software, not software alone.
- The container-start and `docker cp` numbers follow the exact 2023 commands and are directly comparable in method.
- The 10 GB copy ran in one file-sharing mode only; the VirtioFS-off column of the 2023 table has no 2026 counterpart.
- The iperf3 image is `networkstatic/iperf3` because Docker's `dockerpinata/iperf3:2.1` is not public.
- pgbench needed two adaptations (see `adaptations.txt`): `postgres:alpine` is now PostgreSQL 18, which refuses a data volume at `/var/lib/postgresql/data` and runs its client from the server image.
- Startup is measured by the one method available from the CLI; the 2023 table named no method and had no source.

## Housekeeping

Installed with Homebrew: hyperfine, iperf3 (left installed). Temporary directory `~/dd-bench-2026-10` removed. Images pulled for the run and removed afterwards: `alpine:latest`, `networkstatic/iperf3:latest`, `postgres:alpine`, `ubuntu:latest`, plus the local `virtiofs-demo:latest` (see images-removed.txt). Docker Desktop settings were not changed.
