Ivan Velichko
iximiuz.com · Personal blog · on HN since 2019
Ivan Velichko writes explanatory posts and tutorials on containers, Linux, Kubernetes, and networking.
What HN saysCommenters recommend it for explaining how containers work under the hood, with visual explanations of namespaces and cgroups, plus container debugging guides.
53HN people shared it
13linked it in comments
82stories submitted
1.8Kstory points
10 months agolast shared
2019people per year2026
Most-shared posts
- 1Learning containers from the bottom up5 people · 262 points · first shared 2021 · 22 comments on HN
- 2Ethernet and IP Networking 1015 people · 125 points · first shared 2021 · 8 comments on HN
- 3Container networking is simple (2020)4 people · 282 points · first shared 2020 · 67 comments on HN
- 4Building a Firecracker-Powered Course Platform to Learn Docker and Kubernetes4 people · 158 points · first shared 2023 · 12 comments on HN
- 5Not every container has an operating system inside4 people · 12 points · first shared 2020 · discussion on HN
- 6From Docker Container to Bootable Linux Disk Image4 people · 2 points · first shared 2020 · discussion on HN
- 7Containers vs. pods – taking a deeper look3 people · 153 points · first shared 2021 · 78 comments on HN
- 8A Visual Guide to SSH Tunnels (With Labs)3 people · 11 points · first shared 2022 · discussion on HN
- 9What Is a Container, After All?3 people · 11 points · first shared 2021 · 2 comments on HN
- 10DevOps, SRE, and Platform Engineering2 people · 176 points · first shared 2021 · 95 comments on HN
- 11Writing Parsers with Nom Parser Combinator Framework2 people · 9 points · first shared 2021 · discussion on HN
- 12You don't need an image to run a container2 people · 8 points · first shared 2020 · discussion on HN
- 13Service proxy, pod, sidecar, oh my2 people · 7 points · first shared 2020 · discussion on HN
- 14Kubernetes 1012 people · 6 points · first shared 2023 · discussion on HN
- 15Layman's Iptables 1012 people · 6 points · first shared 2019 · discussion on HN
What HN people wrote when they linked it
udev4096 · 2025-07-06
I mean most people still see it as a blackbox. The magic is in namespaces, cgroups, etc. I would recommend reading this series: https://iximiuz.com/en/posts/container-learning-path/
hyzyla · 2022-02-07
https://iximiuz.com - Ivan Velichko - blog that explains Kubernetes, Docker, Linux, etc visually
iximiuz · 2021-06-03
It does work! Actually, it's my favorite type of containers so far https://iximiuz.com/en/posts/not-every-container-has-an-operating-syst…
kitd · 2025-11-13
Not that I could find. There is always the option to use a sidecar container, eg:
https://matthewsanabria.dev/posts/no-shell-for-you-container/
https://iximiuz.com/en/series/mastering-container-debugging/
ramchip · 2025-01-25
Yeah, I'm simplifying a bit. It may not cause an immediate exit, but it can leave the service broken in unpredictable ways. See this discussion for instance: https://iximiuz.com/en/posts/go-http-handlers-panic-and-deadlocks/
asicsp · 2024-09-20
See also:
A Visual Guide to SSH Tunnels: Local and Remote Port Forwarding https://iximiuz.com/en/posts/ssh-tunnels/
dlahoda · 2023-09-06
what is performance of image building with this? can it build isolation container without image build https://iximiuz.com/en/posts/you-dont-need-an-image-to-run-a-container… ?
anderspitman · 2022-11-11
FWIW it's not too difficult to convert a docker image to a VM rootfs. See rootfs_builder[0] for example.
I'm currently working on a wrapper for QEMU that has docker-like semantics for pull/run/start/stop/exec/etc, but it will pull docker images from docker registries and convert them to qcow2 for you and run them in QEMU. It works on Linux and Windows and should run on MacOS and BSD eventually.
[0]: https://github.com/ForAllSecure/rootfs_builder
EDIT: Also see https://iximiuz.com/en/posts/from-docker-container-to-bootable-linux-d…
pests · 2021-06-04
How is this true?
A container _is_ an ordinary process.
https://iximiuz.com/en/posts/not-every-container-has-an-operating-syst…
(we just discussed another article by the same author a few days ago on slimmer containers)
"The container process is isolated (namespaces) from the rest of the system and restricted from both the resource consumption (cgroups) and security (capabilities, AppArmor, Seccomp) standpoints. But in the end, this is still a regular process, same as any other process on the host system."
limonod · 2021-03-06
I like the diagrams! Especially the one about Kubernetes API https://iximiuz.com/kubernetes-operator-pattern/kube-api-structure-300…
Going to print it out and put it on the wall.
nicwolff · 2021-01-23
It may not be what fly.io does but there's a walkthrough of the basic idea here https://iximiuz.com/en/posts/from-docker-container-to-bootable-linux-d…
adql · 2023-03-22
Same way you do with any other app not specifically designed for it; you start 2 copies of it and put loadbalancer in front of it. I did that via some systemd voodoo
But TECHNICALLY to do that in one without external proxy you'd need to figure out how to set SO_REUSEPORT for the web socket handler, then start the second one before the first.
Haven't actually tried it but someone apparently did: https://iximiuz.com/en/posts/go-net-http-setsockopt-example/
You'd still have any ongoing connections cut unless you unbind socket and then finish any existing connection, which would be pretty hard with default http server.
I just put HAProxy instance on my VPS that does all of that, including only allowing traffic once app says "yes I am ok" in healthcheck. Then the app can have "shutting down" phase, where it reports "I am down" on healthcheck but still finished any active connections to the client.
kalaracey · 2021-02-20
Thanks for writing this up. I saw your original comment a while back was intrigued, and I got it working last weekend on a 2-vm vagrant private network setup, but only by constructing the network prefix by using a 32 bit ULA prefix concatenated on the full 32 bit ipv4. I think it worked (hooked up wireshark to a tcpdump of the vm's interface to the private network and saw the 6-in-4 packets) but I didn't need to use the `6rd-relay_prefix` argument to ip tunnel, do you have any idea why that might be? I suspect 32+32 is the default (vs. your 40+24), and if you want to only use the lower 24 bits of the ipv4, you need to indicate to the kernel what netmask you are using on your ipv4 network ("6rd relay prefix"). I guess that would buy you either more randomness in your ULA prefix, or some more ipv6 subnets per ipv4 vm.
You can explore this a bit further and set up some net namespaces, connect them to the host vm via a bridge device, assign them ipv6 addresses from the vm host /64 network, and then set up a default route inside each container to the /32 or /40 you're using via the vm host's address on the host local /64. It's cool to see one container on host 1 talk to another on host 2. You're basically subnetting the /40 for each host; each host is analogous to a household in 6rd, and the containers are like your devices on your lan with globally routable ipv6 addresses (except we're using a ULA prefix instead of a globally routable ipv6 prefix assigned to an ISP, so our…