<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>#Containerization — Seconds to Midnight</title><description>Content tagged with #Containerization.</description><link>https://dbuho.me</link><language>en</language><copyright>© 2026 Damián Búho</copyright><managingEditor>damian.buho@proton.me (Damián Búho)</managingEditor><webMaster>damian.buho@proton.me (Damián Búho)</webMaster><lastBuildDate>Thu, 12 Nov 2026 16:25:24 GMT</lastBuildDate><category>Resilience</category><ttl>60</ttl><image><url>https://dbuho.me/favicon-48x48.png</url><title>#Containerization — Seconds to Midnight</title><link>https://dbuho.me</link></image><atom:link rel="self" type="application/rss+xml" href="https://dbuho.me/tags/containerization.rss"/><item><title>Post: Deployed I2P Reseed server on Kiota</title><link>https://dbuho.me/post/deployed-reseed-server-for-i2p-on-kiota/?utm_source=tag-containerization&amp;utm_medium=rss</link><guid isPermaLink="false">01M293G9GXAA3B39G0HNK87ARR</guid><description>Made my own reseed server for I2P . I2P is a peer-to-peer network which uses “Garlic Routing” to maintain privacy. Reseed nodes help you get connected to I2P for the first time, and even though you should only have to use them once in a great while, they are very important services. I have my own distribution/image that automates some fuss with installation. Feeling like a very niche Atlas.</description><pubDate>Wed, 02 Sep 2026 02:59:00 GMT</pubDate><content:encoded>&lt;p&gt;Made my own &lt;a href=&quot;https://reseed.kiota.ch&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; class=&quot;external-link&quot;&gt;reseed server for I2P&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I2P is a peer-to-peer network which uses “Garlic Routing” to maintain privacy. Reseed nodes help you get connected to I2P for the first time, and even though you should only have to use them once in a great while, they are very important services.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have my own &lt;a href=&quot;https://dbuho.me/project/f5m-i2p-reseed/&quot;&gt;distribution/image&lt;/a&gt; that automates some fuss with installation.&lt;/p&gt;
&lt;p&gt;Feeling like a very niche Atlas.&lt;/p&gt;</content:encoded><category>Containerization</category><category>Networking</category><category>I2P</category><category>Censorship</category><author>damian.buho@proton.me (Damián Búho)</author></item><item><title>Post: What is image distillation?</title><link>https://dbuho.me/post/what-is-image-distillation/?utm_source=tag-containerization&amp;utm_medium=rss</link><guid isPermaLink="false">01M3DBT8KSGE56K90ATV87MDZH</guid><description>There are at least four ways to go about building container images: Small distributions, like Alpine Cut-down server versions (e.g., debian-slim ) Whatever tf Ubuntu Chiseled is Distroless I use a fifth one.</description><pubDate>Tue, 16 Jun 2026 02:59:00 GMT</pubDate><content:encoded>&lt;p&gt;There are at least four ways to go about building container images:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Small distributions, like Alpine&lt;/li&gt;
&lt;li&gt;Cut-down server versions (e.g., &lt;code&gt;debian-slim&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Whatever tf Ubuntu Chiseled is&lt;/li&gt;
&lt;li&gt;Distroless&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I use a fifth one.&lt;/p&gt;
&lt;h2&gt;Pain&lt;/h2&gt;
&lt;p&gt;In my experience, no one really likes building Alpine images, but because they&amp;#39;re so lean, people feel forced to. MUSL, busybox, ash, python issues, package names often differ, command flags vary slightly, and so on.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve used Ubuntu/Debian as an image base since 2018 because my developers were Debian-oriented and felt much more confident whenever they had to operate inside containers to debug.&lt;/p&gt;
&lt;p&gt;In production, though, Debian-based images are far from perfect. Debian has long confused &amp;#39;paleolithic&amp;#39; with &amp;#39;stability.&amp;#39; Meanwhile, Canonical adds useless thingamajigs like Pebble—complete with a bunch of Go stdlib vulnerabilities—or ruins RISC-V compatibility with an unnecessary move to vector extensions.&lt;/p&gt;
&lt;p&gt;Distroless images are pure and perfect — and also feel like a war crime when you&amp;#39;re actually building them. Every single dependency has to be hand-crafted, and you constantly feel phantom pain from missing basic shell tools.&lt;/p&gt;
&lt;p&gt;Don&amp;#39;t get me wrong: I love it, but it&amp;#39;s a kink.&lt;/p&gt;
&lt;h2&gt;Distillation&lt;/h2&gt;
&lt;p&gt;To keep a cozy environment while working on a project, while simultaneously stripping down the attack surface of the production image, I use a technique I call &lt;strong&gt;image distillation&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s fairly obvious (I&amp;#39;m pretty sure many people do this, I didn&amp;#39;t invent anything), but I haven&amp;#39;t found an established term for it yet (I&amp;#39;d be glad to be proven wrong if you know one).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Build in whatever base image you like: Alpine, Ubuntu, or whatever Red Hat is calling their server distro this week.&lt;/li&gt;
&lt;li&gt;At the end of that build stage, &lt;code&gt;COPY&lt;/code&gt; everything you actually need (binary + libraries + runtime data) into a single folder (mine is usually called &lt;code&gt;/export&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Add a final stage with &lt;code&gt;FROM scratch&lt;/code&gt; or &lt;code&gt;FROM distroless&lt;/code&gt;, with a single &lt;code&gt;COPY --from=builder /export /&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You get the fat-free security of distroless in production with the developer pleasantries of a full OS during build time.&lt;/p&gt;
&lt;p&gt;You won&amp;#39;t get any progress in understanding the meaning of life or finding true love, though.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s just a slim container image, what did you expect?&lt;/p&gt;</content:encoded><category>Developer Experience</category><category>Containerization</category><category>Debian</category><category>Ubuntu</category><category>Docker</category><author>damian.buho@proton.me (Damián Búho)</author></item><item><title>Post: What is B19 images and how I wrap things in containers</title><link>https://dbuho.me/post/what-is-b19/?utm_source=tag-containerization&amp;utm_medium=rss</link><guid isPermaLink="false">01M3DBSDTEQ9SDFATFNBFXEQ7B</guid><description>A big part of my portfolio consists of so-called b19-style images. (b19 means nothing—you just can&amp;#39;t get a proper namespace these days.) It started as an internal effort for my personal and commercial projects, but ended up as a set of conventions unified across 100+ various images (both wrappers and originals). I wanted every container to behave in a predictable way, agnostic of the tech stack, whether it&amp;#39;s a source-based or upstream-based project. I&amp;#39;m not urging anyone to adopt this directly yet—I need some time in public to polish everything—but if you&amp;#39;re tasked with a similar unification job or manage a fleet, feel free to steal the conventions. The conventions are anchored in B19/Ubuntu and flow organically into all downstream projects. The conventions are unopinionated (though the defaults can be). What&amp;#39;s inside?</description><pubDate>Tue, 09 Jun 2026 02:59:00 GMT</pubDate><content:encoded>&lt;p&gt;A big part of my portfolio consists of so-called b19-style images.&lt;br /&gt;
&lt;em&gt;(b19 means nothing—you just can&amp;#39;t get a proper namespace these days.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It started as an internal effort for my personal and commercial projects, but ended up as a set of conventions unified across 100+ various images (both wrappers and originals). I wanted every container to behave in a predictable way, agnostic of the tech stack, whether it&amp;#39;s a source-based or upstream-based project.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m not urging anyone to adopt this directly yet—I need some time in public to polish everything—but if you&amp;#39;re tasked with a similar unification job or manage a fleet, feel free to steal the conventions.&lt;/p&gt;
&lt;p&gt;The conventions are anchored in &lt;a href=&quot;https://dbuho.me/project/b19-ubuntu/&quot;&gt;B19/Ubuntu&lt;/a&gt; and flow organically into all downstream projects.&lt;br /&gt;
The conventions are unopinionated (though the defaults can be).&lt;/p&gt;
&lt;p&gt;What&amp;#39;s inside?&lt;/p&gt;
&lt;h2&gt;Basic container decency&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Follows 12-factor app guidelines&lt;/li&gt;
&lt;li&gt;Reasonable, secure, and safe defaults with minimal user input required&lt;/li&gt;
&lt;li&gt;Images should be immutable; all state lives in volumes&lt;/li&gt;
&lt;li&gt;Support for XDG and other industry standards&lt;/li&gt;
&lt;li&gt;Proper telemetry everywhere&lt;/li&gt;
&lt;li&gt;File operations use locks, always keeping concurrency in mind&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Dockerfile orchestrates&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;No shell sagas&lt;/li&gt;
&lt;li&gt;No mile-long &lt;code&gt;RUN&lt;/code&gt; commands—one &lt;code&gt;RUN&lt;/code&gt; per stage&lt;/li&gt;
&lt;li&gt;Minimal layers&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Switches, toggles, handles&lt;/h2&gt;
&lt;p&gt;B19-style images expose switches for all kinds of behavior: there&amp;#39;s no such thing as &amp;quot;too many switches.&amp;quot; Where possible, switches are set via environment variables (relying on various mounts and binds is messy).&lt;br /&gt;
Configuration files are generated via Jinja2 templates driven by environment variables.&lt;/p&gt;
&lt;h2&gt;Everything is &lt;code&gt;.d&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Numbered hooks everywhere. Everything can be extended or overridden via simple drop-in shell scripts in downstream projects. Hooks can be inherited:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build is &lt;code&gt;build.d&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Healthcheck is &lt;code&gt;healthcheck.d&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Entrypoint is &lt;code&gt;entrypoint.d&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Designed with off-grid in mind&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Do not assume connectivity is guaranteed&lt;/li&gt;
&lt;li&gt;Do not assume fast or stable connectivity&lt;/li&gt;
&lt;li&gt;Timeouts, backoffs, and retries everywhere&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In other words, a b19 distribution comes with all the things you would end up adding to an official image anyway—right out of the box.&lt;/p&gt;</content:encoded><category>Meta</category><category>Containerization</category><category>Docker</category><category>Continuous Integration</category><category>Continuous Deployment</category><author>damian.buho@proton.me (Damián Búho)</author></item></channel></rss>