Golang UK Conf. 2016 - Liz Rice - What is a container, really? Let's write one in Go from scratch
GopherCon UK3 HN recommenders · recommended in 5 months, 2016–2019
talk · intermediate · evergreen · 2016–2019 on HN
Liz Rice builds a container from scratch in about 100 lines of Go, showing that a container is not a lightweight VM but a set of Linux kernel features and flags.
HN recommends it as an accessible way to remove the magic from Docker and understand how containers work.
Up next
3 mo on HNCRDTs and the Quest for Distributed Consistency
InfoQ
3 HN recommender · 2018–2020
2 mo on HNContainer Hacks and Fun Images
Jessie Frazelle
2 HN recommender · 2019–2022
2 mo on HNNetdev 0x16 - Keynote: It's Time to Replace TCP in the Datacenter
netdevconf
2 HN recommender · 2023–2023
13 mo on HNRich Harris - Rethinking reactivity
You Gotta Love Frontend
15 HN recommender · 2019–2026
4 mo on HNJavascript in 2015
Glen Maddern
3 HN recommender · 2015–2017
3 mo on HNCgroups, namespaces, and beyond: what are containers made from?
Docker
4 HN recommender · 2017–2023
11 mo on HNCppCon 2015: Andrei Alexandrescu “std::allocator...”
CppCon
7 HN recommender · 2017–2025
12 mo on HNLexical Scanning in Go - Rob Pike
GoogleFOSSSydney
13 HN recommender · 2012–2025
10 mo on HNCppCon 2017: Matt Kulukundis “Designing a Fast, Efficient, Cache-friendly Hash Table, Step by Step”
CppCon
9 HN recommender · 2018–2026
9 mo on HNRustConf 2018 - Closing Keynote - Using Rust For Game Development by Catherine West
Rust Programming Language
9 HN recommender · 2018–2023
10 mo on HNCppCon 2016: Jason Turner “Rich Code for Tiny Computers: A Simple Commodore 64 Game in C++17”
CppCon
13 HN recommender · 2016–2024
9 mo on HNIdeas about a new programming language for games.
Jonathan Blow
7 HN recommender · 2014–2025
5 comments from Hacker News
This is precisely why I said the fact that someone would gloss over this is a red flag. The point is super critical . VMs are literally so hard to do correctly and in a performant fashion that parts of CPU instruction sets[0], and kernel subsystems (KVM[1]) were created to make them easier to run. Containers, in contrast are literally a few flags and a bunch of in-kernel antics. A few people, notably Liz Rice and Jessie Frazelle have given talks on how to make containers from scratch that are very illuminating for those that are interested: ▶ this video link [0]: link [1]: link
In the same vein: Building a container from scratch in Go (Liz Rice) @ Container Camp 2016 -> link What's a container really let's write one in go from sctach (Liz Rice) @ Golang UK Conference -> ▶ this video Cgroups, Namespaces and beyond: What are containers made from (Jerome Petazzoni) @ DockerCon 2015 - link Building Containers in Pure Bash and C (Jessica Frazelle) @ ContainerSummit 2016: link First two are basically the same talk, but it doesn't hurt to hear the same ideas more than once.
Super late to this thread but the best video I've ever seen on how docker/containers work is this one: Jessica Frazelle's (docker core maintainer) talk on how to build containers in pure bash and C: link There's also this one, which is similar: ▶ this video
I started by watching ▶ this video and reading link Also "man namespaces" on a linux machine will give some deeper documentation.
The core philosophy of "one app per container" has not changed. Strictly speaking, this will never change because containers - whether Docker, ACI, or OCI - are processes and not VMs . I recommend this accessible presentation on how to write a poor-mans Docker by hand[1] to remove some of the magic behind containers. As with any philosophy, there are many smart people who hold an opposite view. Docker itself is perhaps deviating from the architectural simplicity of container==process, while the underdog rkt is enforcing this approach even at the cost of user-land usability (e.g. rkt cannot run containers as daemons by itself). In practice, most containers must have an OS wrapping the application (unless you're distributing binaries), and that OS often ends up being a nearly fully baked version of Ubuntu/Debian/Fedora or whatever the person is most comfortable with outside of Docker. edit PS: One common exception to this philosophy is a short-lived container for admin/management/debugging. Having a full OS with devel/admin tools is useful for investigation/maintenance purposes, then you kill it and nothing is changed in prod. [1] ▶ this video