Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Do all docker images have minimal OS?

I am trying to learn Docker and for that referring to online materials. I came to know that there is official hub of images which we can pull, and run a container.

The repos are available at https://hub.docker.com/ , part of screen shot:

enter image description here

In this diagram we can see the official images of ubuntu, httpd, mysql (and so on).

My question is:

Do all these images have "minimal OS" on which they run. For example, if we consider httpd image, does it have the needed OS on which it runs?

like image 470
CuriousMind Avatar asked Oct 12 '17 11:10

CuriousMind


People also ask

Do all Docker images have an OS?

Every image contains an complete os. Special docker made OS's come with a few mega bytes: for example linux Alpine which is an OS with 8 megabytes! But bigger OS like ubuntu/windows can be a few gigabytes.

Does Docker image depend on OS?

Here, the Docker container engine is entirely dependant on the container features of the Linux kernel, and that's the reason why Docker containers cannot run on Windows and Mac operating systems. The Unix kernel powers the Mac operating system, similarly the Windows kernel powers the Windows operating system.

Are Docker images OS independent?

According to Docker, a container is ” a lightweight, stand-alone, executable package of a piece of software that includes everything needed to run it.” And since containers are platform-independent, Docker can run across both Windows- and Linux-based platforms.

Does container image have OS?

Since containers share the host OS, they do not need to boot an OS or load libraries. This enables containers to be much more efficient and lightweight. Containerised applications can start in seconds and many more instances of the application can fit onto the machine as compared to a VM scenario.


2 Answers

From my understanding images are built in a layered architecture from a parent image. So we have a parent image and then the changes for this image is one more layer above parent image. If you see dockerfile for an image you can see something like this

FROM node:6.11.5

This node:6.11.5 is a parent image for our current image.

If you check dockerfile of parent images you will find they are somewhere in the hierarchy follow from base image.

This base image is basically an OS without kernel but has only userland software based on the different linux distributions(eg, centos, debian). So all the images uses the host OS kernel. Hence, you cannot install a Windows container on a Linux host or vice-versa.

So basically all images are layered changes on the base image which is an OS without kernel.

Please find below links for further information:

https://serverfault.com/questions/755607/why-do-we-use-a-os-base-image-with-docker-if-containers-have-no-guest-os

https://blog.risingstack.com/operating-system-containers-vs-application-containers/

If you need to create a base image you can see the steps here.

https://docs.docker.com/develop/develop-images/baseimages/

Please correct me if i am wrong.

like image 99
viky.pat Avatar answered Oct 22 '22 15:10

viky.pat


Most images are based on a distribution as you can see it in their Dockerfiles. Except for the distribution images themselves. They have a different base-image, which is called scratch.

You can review the images they are based on when you visit the project's page on DockerHub, for example https://hub.docker.com/_/httpd/

Their Dockerfiles are referenced and you can review them by clicking on them, e.g. the first tag "2.2" refers to this file. The first line in the Dockerfile is FROM debian:jessie and shows, that it is based on a Debian image.

It is widely used to have a separated tag with the postfix -alpine in it to indicate, that alpine linux is used, which is a much smaller base-image than the Debian image. This leads to a smaller image of the httpd image, because the base-image is much smaller.

like image 40
n2o Avatar answered Oct 22 '22 15:10

n2o