
The most common way to run a container is by using the Docker CLI.
But what exactly does docker run nginx
do?
Does it simply start another process on the host,
or does it spin up a full-blown virtual machine?
What kind of execution environment does the containerized application get?
Does it have an isolated filesystem?
Can it see other processes on the host?
Does it have its own private network stack?
In this skill path, you'll run the same container image across different container runtimes: Docker, Podman, nerdctl, ctr, and even the low-level runc. After starting the container, you'll explore it to understand what exactly constitutes a container and how the containerized application "sees" its execution environment.
Along the way, you'll also have the opportunity to compare the user experience (UX) of different container runtimes and examine the differences and similarities in how they implement core container concepts.
Let's get started!

Running Containers with Docker
To establish a baseline, run a container using the (de facto standard) Docker CLI and inspect it.
Running Containers with Podman
From a UX standpoint, Podman is very similar to Docker (it even aims to be a drop-in replacement for simpler use cases). However, unlike Docker, Podman is a daemonless tool. Run a container with Podman and inspect it to determine whether this architectural difference affects the container's behavior in any way.
Running Containers with nerdctl
Another tool that mimics Docker's UX is nerdctl. It is a (pretty advanced) CLI for containerd, that makes its architecture more similar to Docker than Podman. In this challenge, you'll run a container with nerdctl and inspect it. Can you spot any differences compared to the previous two challenges?
Running Containers with ctr
The tools mentioned above are all pretty user-friendly, which makes them a good choice for day-to-day use. However, for someone looking to learn more about containers, they may abstract too many container implementation details. In this challenge, you'll need to run a container with ctr, the lower-level, "default" containerd client, to get a deeper look into container management.
Creating and Starting Containers Manually with runc
Compared to Docker, Podman, and nerdctl, ctr is a more low-level tool. However, it still abstracts away much of the manual management of container configuration, the root filesystem, and the network stack.

In this challenge, you'll run a container with runc, the lowest-level container runtime. runc serves as the reference implementation of the OCI runtime specification and is the default container runtime behind Docker and containerd (including when used via nerdctl), so trying to use it from the command line at least once is a must-do for an aspiring container guru.
Level up your Server Side game — Join 10,000 engineers who receive insightful learning materials straight to their inbox