Linux – Why docker has ability to run different linux distribution?


We can use docker to pull different images. And these images are different linux distribution.
But no matter which linux distro docker is running on, docker can run these different linux distribution just like in a virtual machine.

I know docker uses aufs to control different read-write access level. So it can reuse some file on the host machine. But how can docker run apt-get in a container when my host runs arch linux? Does the image contain the apt-get binary? But different linux distribution have different libs and software version. Even the configuration file are different.How can docker "run" ubuntu in a arch linux?

Best Solution

Because the kernel is the same.

The common point of all linux distributions, and why they are called linux, is because they all use the linux kernel.

Containers share the same kernel as the host, that's why you can run an Arch image on a Ubuntu host.

Here's an overview of Linux.

The kernel is a part of the operating system that handles communication with the hardware. It's the lowest level of the operating system. Here is a list of the main functions of the kernel:

  • memory management
  • network management
  • device driver
  • file management
  • process management

So when you use a container you only have access to the kernel of the host, since it's the only part that communicates with hardware, as long as your OS uses the good syscall, you are able to run any linux distribution inside your container. (This is the reason you can't use Windows inside a container: it's not using the same syscall).