<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Registry on Margrop Blog</title>
    <link>https://blog.margrop.net/en/tag/registry/</link>
    <description>Recent content in Registry on Margrop Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    <lastBuildDate>Fri, 26 Jun 2026 12:30:00 +0800</lastBuildDate>
    <atom:link href="https://blog.margrop.net/en/tag/registry/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Docker Images, No More Begging: Build Your Own 13 GB Private Registry From Scratch</title>
      <link>https://blog.margrop.net/en/post/build-private-docker-registry-without-hassle/</link>
      <pubDate>Fri, 26 Jun 2026 12:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/build-private-docker-registry-without-hassle/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;My home server runs a single &lt;code&gt;registry:2&lt;/code&gt; container that currently holds &lt;strong&gt;13 GB of cached blobs across 95 repositories&lt;/strong&gt;. Every NAS, Proxmox node, Mac, and Windows machine on my LAN pulls through it. A cold start of &lt;code&gt;alpine:3.19&lt;/code&gt; finishes in under a second, with zero traffic going out to the public Docker Hub.&lt;/p&gt;&#xA;&lt;p&gt;This isn&amp;rsquo;t a one-line &amp;ldquo;install Docker and run a container&amp;rdquo; tutorial. I&amp;rsquo;ll show you the &lt;strong&gt;production-grade deployment script I actually run&lt;/strong&gt;, walk through the Docker v2 auth flow, and call out the four reverse-proxy pitfalls that turn every &lt;code&gt;docker login&lt;/code&gt; into a 401 mystery. You&amp;rsquo;ll leave able to: ① bring up an authenticated registry in 10 minutes; ② explain why the &lt;code&gt;WWW-Authenticate&lt;/code&gt; header is sacred; ③ describe the whole thing to a non-technical family member without losing accuracy.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>From 5m14s to 0.6s: How I Rebuilt My Docker Hub Mirror After Hitting Three Walls</title>
      <link>https://blog.margrop.net/en/post/docker-registry-mirror-rebuild-2026/</link>
      <pubDate>Sat, 13 Jun 2026 07:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/docker-registry-mirror-rebuild-2026/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;My home lab had a &lt;code&gt;registry:2&lt;/code&gt; pull-through cache fronting Docker Hub for years, and it was fine. Then one day pulling a 5 MB &lt;code&gt;alpine:3.19&lt;/code&gt; took 5 minutes and 14 seconds. This post is the full forensic log of how I traced the slowdown, evaluated 8 candidate mirrors with real measurements (not vibes), and finished with a 5-line bash script on cron that &lt;strong&gt;auto-fails-over&lt;/strong&gt; when the primary mirror goes down. Every number in this article was captured on my own hardware, in my own network, at one specific moment in time.&lt;/p&gt;&#xA;&lt;p&gt;If you also self-host a Docker Hub mirror, or your team runs an internal registry, the Q&amp;amp;A at the bottom will probably save you 3 hours of pain.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
  </channel>
</rss>
