Hi! 👋
You might notice I went full-on publishing these Container articles. Reasoning is that I actually drew all the remaining ones, but it takes some time to write actual follow-up text. That’s why I’m publishing one per day (and there are 2 more to go and we’re done!).
Anyway, today’s topic is something I kept referring to over & over again, and I felt it might need some additional clarification. So - what is Container Runtime Engine?
(click on image to expand)
I hope the image gave enough clarity, or?
In order to fully grasp the concept, Wikipedia’s definition of Runtime System might come on handy:
Most programming languages have some form of runtime system that provides an environment in which programs run. This environment may address a number of issues including the management of application memory, how the program accesses variables, mechanisms for passing parameters between procedures, interfacing with the operating system, and otherwise. The compiler makes assumptions depending on the specific runtime system to generate correct code. Typically the runtime system will have some responsibility for setting up and managing the stack and heap, and may include features such as garbage collection, threads or other dynamic features built into the language.
Source: Wikipedia
Runtimes are there to make stuff easier. C++ Runtime is there to bridge the gap between your code and actual OS kernel, .NET’s Runtime (CLR) is there to to bridge the gap between all the .NET languages and Operating System, Java’s VM (JVM) is there to ensure your Java bytecode can talk to any OS, etc. You get a gist, right?
Same is true for Container Runtimes (also called Container Engines). They are a set of libraries that bridge the gap between actual container and the underlying OS. Here’s a refresher from How do COWs (Containers on Windows) work?:
Containerd is a runtime engine. It provides all that is necessary to prepare the environment (i.e. create Silos, Namespaces, configure Networking, etc.) and then start the actual process. But so is Docker (strictly speaking - Docker is SET of tools, but one of those tools is the actual runtime engine). And many others that are out there:
I’ll leave you with that for today. If you are feeling curious, you might want to try out other runtimes and see how they behave (e.g. Firecracker seems to be a popular one).
Next time I’m going to talk about Image Distribution (i.e. how do you upload/download them from Registry). Until then, if you liked this article, do consider subscribing and/or sharing it with your friends and colleagues :)
Thanks for reading!
Other interesting articles in the series:
Nice article and presentation. Curious, what tool or app or platform do you use to prepare those hand-draw style of images and hand-written kind of fonts, etc?