Ubuntu – what’s the difference between base os ubuntu and image ubuntu

docker

I just get started with docker.

I'm a little confused by the concept of base os and base image.
I'm on mac os, so to use docker locally, I have to install docker machine to create a vm to run docker.

from this doc of docker. For local virtualbox, the default base os is boot2docker, and for remote, the default base os is ubuntu 12.04+.

What confusing me is that I can find an ubuntu image on docker hub. My previous understanding is the docker images are just applications which can be run based on a linux os.

  1. But why there's an image which is a complete os???
    What's happening if I run an ubuntu image on an ubuntu os???

Another question is: docker container will share the same OS kernel, that's why the cost of running a docker container is very low.

  1. which kernel they're sharing?? Is it the kernel of the host OS(base os: boot2docker) or the kernel of the OS image (ubuntu image)???

  2. If they're sharing the host OS's kernel, what it means when I run a ubuntu OS container on top of an ubuntu host OS???

  3. boot2docker is a stipe-down version of linux OS, does it have all the things that a random container needs??? if yes, then why use ubuntu base OS???

Best Answer

For convenience, there are default base operating systems.

  • For the Oracle Virtual Box driver, this base operating system is the boot2docker.iso.
  • For drivers used to connect to cloud providers, the base operating system is Ubuntu 12.04+

Those are two different environments, as I described in "Container as a Service (Caas)":

DockerCon Eu 2015

  • the non-Linux host will use a TinyCore-based BM called boot2docker: in it you can run docker daemon and launch any container based on any image you want (ubuntu or otherwise)
  • the cloud hosts, that is cloud providers, the base operating system is the latest Ubuntu LTS the provider supports. Hence Ubuntu 12.04.
    To use a different base operating system on a remote provider, specify the provider’s image flag and one of its available images. For example, to select a debian-8-x64 image on DigitalOcean you would supply the --digitalocean-image=debian-8-x64 flag.

In all environments, the goal is to provide a Linux kernel recent enough to support docker feature, allowing any docker image to delegate its system calls to the kernel.

Related Question