Build1 distinct publisher3 min readPublished
Treating the runtime and the weights as a container image buys you a hardened default docker run and a signable artifact. On Apple Silicon, though, that same boundary costs you the GPU. One hands-on run puts a number on that cost.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
The interesting part is what `--dryrun` prints, because that is the whole security argument in one line. On the author's Mac, `ramalama --dryrun run smollm:135m "hi"` expands to a `docker run` carrying `--security-opt=label=disable --cap-drop=all --security-opt=no-new-privileges --pull always`, then launches `llama-server` from `quay.io/ramalama/ramalama:0.24` [3]. Every Linux capability gets dropped and privilege escalation is disabled. The image itself is pinned by tag. That is a runtime you can hand to whoever signs your images, because it is an image [2]. The weights come from Hugging Face, Ollama, or any OCI registry [2], and `smollm:135m` resolves to `hf://HuggingFaceTB/smollm-135M-instruct-v0.2-Q8_0-GGUF` [5], so the provenance chain is a registry reference rather than a script that curls a file.
Then Metal. A Linux container on Apple Silicon has no path to the Mac's GPU, and `ramalama info` says so plainly: `"Accelerator": "none"` [7]. The escape hatch is `--nocontainer`, which runs the copy of llama.cpp that Homebrew installed alongside RamaLama [8], and Homebrew does install `llama.cpp`, `ggml` and `libomp` as dependencies of the 0.24.0 formula [4]. On the same model and prompt, native served Llama-3.2-1B (Q4_K_M) offloaded 17 of 17 layers to an Apple M4 Pro and generated at about 206 tokens/sec, against about 102 tokens/sec for the containerized CPU run [9][10]. That is a 2.02x ratio [11], measured on one M4 Pro with 48 GB and macOS 26.6, Docker 29.4 via OrbStack, on RamaLama 0.24.0 [1].
For that number to transfer you need the same three things to hold: a CPU-only container path (true for any Docker-on-macOS setup, because the VM boundary is the cause), a model small enough that 4-bit 1B weights fit comfortably in unified memory, and a thread count near the seven llama-server was given [3]. On a Linux box with a passed-through NVIDIA device, the comparison inverts and the container keeps the accelerator. The macOS penalty is a property of the virtualization boundary, not of RamaLama.
So the tradeoff is legible, which is the nicest thing I can say about a tool. Go containerized and you get dropped capabilities and a signable image, at half the tokens per second. Go native and you get full Metal offload, and you are back to trusting a Homebrew-installed binary with your host's privileges. Pick per environment. Sign the image and run it in CI where the accelerator is a real PCI device; use `--nocontainer` on the laptop where the GPU is unreachable anyway.
One caution on the smoke test. The 135M model is a 138 MB download [5] and answered the container question by inventing "2048-bit containers" and a `docker-compose up -v` flag that does not exist [6]. First-run wall clock was 2 minutes 56 seconds, nearly all of it pulling the roughly 1 GB base image and the weights [6][3]. It validates plumbing and nothing else; `llama3.2:1b` at 770 MB answers correctly [6][12].
Ranked by verification strength, evidence, and original report placement.
The hands-on run used an Apple M4 Pro Mac with 48 GB RAM and macOS 26.6, Docker 29.4 provided by OrbStack, and RamaLama 0.24.0; every command and number in the guide came from that run.
RamaLama is an open-source CLI from the container-tooling community that runs large language models as OCI containers, pulling a hardened OCI image containing llama.cpp (or vLLM/MLX) plus the chosen model and running it with Podman or Docker; the runtime and model live inside containers you can inspect and sign, and weights come from Hugging Face, Ollama, or any OCI registry.
On the author's Mac, `ramalama --dryrun run smollm:135m "hi"` expands to a docker run with --security-opt=label=disable, --cap-drop=all, --security-opt=no-new-privileges, --pull always, -d -p 8080:8080, --init, image quay.io/ramalama/ramalama:0.24, launching llama-server with --threads 7; the base image is about 1 GB, downloaded once and reused.
`brew install ramalama` pulled RamaLama 0.24.0 plus its own copies of llama.cpp, ggml and libomp as dependencies.
smollm:135m resolves to hf://HuggingFaceTB/smollm-135M-instruct-v0.2-Q8_0-GGUF, a 138 MB 8-bit quantized GGUF from Hugging Face.
First-run wall-clock was 2 minutes 56 seconds, almost all of it downloads; the 135M model invented "2048-bit containers" and a docker-compose up -v command that does not exist, while llama3.2:1b answered the same question correctly.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 31, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
Binding a local model server to 0.0.0.0 hands the LAN an unauthenticated API1 distinct publisher
build
Qwen 3.8's Apache-licensed 27B is the one you can actually own, and its KV cache is why1 distinct publisher
build
Mac Studio M5 Ultra vs DGX Spark: capacity says what fits, bandwidth says what you wait for1 distinct publisher
leadership
You Procured Qwen. Your Edge Boxes Are Running Somebody Else's File.1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One afternoon, one machine, exact numbers
The specificity is genuine: quoted dry-run flags, a pasted `ramalama list`, the ggml_metal_init line naming the M4 Pro, 2:56 of wall-clock, 206 against 102 tokens per second. That beats most local-LLM writing, which paraphrases documentation instead of logs. What holds the score down is that all of it is one person's single session — no second machine, no repeated runs, and the signing capability at the centre of the premise is asserted rather than exercised.
Installable everywhere, counted nowhere
What this reporting establishes is distribution, not uptake: a Homebrew formula that lands 0.24.0, a base image sitting on quay.io, and weights pulled interchangeably from Hugging Face or Ollama. No user counts, no team that has standardised on it, no production deployment. Read the low number as absence of measurement rather than as a verdict on the tool.
Sells the cost, not only the benefit
dev.to does the unusual thing and publishes the figure that undercuts its own framing — half the throughput inside the container on Apple Silicon — then tells Mac readers to use --nocontainer and keep LM Studio around for browsing. The single place the writing runs ahead of what it shows is the signature: images 'you can inspect and sign' is a property of the format here, never demonstrated end to end. Net effect is marginally under-claimed rather than oversold.
Practitioner audience-building, no vendor thumb
This is a personal walkthrough with links to the author's other guides threaded through it — a readership incentive, not a commercial one. No sponsorship, no disclosed tie to the project, and it closes by pointing part of its likely audience at LM Studio instead. That is the shape of someone building a following, not of anyone selling inference.
Precise, plausible, unreplicated
The mechanism checks out on its own terms — Docker's Linux VM has no route to Metal, so an accelerator reported as none and a roughly twofold gap on a 1B model are what you would predict — and the version pinning makes the run reproducible in principle. What is missing is a second pair of hands. Enough to plan your own Mac setup around; not enough to quote as a benchmark.