When we started the RancherOS project, we set out to build a minimalist Linux distribution that was perfect for running Docker containers. We wanted to run Docker directly on top of the Linux Kernel, and have all user-space Linux services be distributed as Docker containers. By doing this, there would be no need to use a separate software package distribution mechanism for RancherOS itself.
An OS made of Containers
In RancherOS, the Docker daemon runs as first process the kernel starts when it boots. We call this instance of Docker "System Docker," as it is responsible for initiating system services, such as udev, DHCP and the console. Each of these system services run as containers. System Docker takes the place of the init system, such as sysvinit or systemd, in other Linux distributions.
User containers run in a separate Docker daemon
RancherOS creates a special system service container called User Docker, that is created by System Docker. A separate Docker daemon runs in the User Docker container. Because all user containers run inside the User Docker container, deleting all user containers, for example, will not bring down the system containers running RancherOS services.
Simple Updates and Rollbacks
RancherOS leverages the extremely powerful Docker packaging and distribution support to deliver updates and features of the operating system. All system services are delivered as Docker containers, and while the kernel and initial ram disk are not Docker containers, we use Docker packaging and distribution to deliver kernel and ram disk update as well.