Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

does docker always need an operating system as base image

I have heard that docker doesn't need a separate os in linux, because it shares with the host os, but in hyper-v Windows it can run Windows OS because it can hyper a linux virtual machine so run linux software on it.

But, I get confused about the FROM stage in the dockerfile, all guides said like this:

FROM ubuntu:18.04
cp . /usr/local/bin
RUN make
CMD /usr/local/bin/youapp

I can understand this step, first you need an OS, then you deploy your application; finally you run your app or whatever.

But what does the FROM stage really mean?

Does it always need an OS? Does nginx docker image have an os in it?

If i want to build my own app, I write it, I compile it, I run it; but does my own app need an OS? If not, what should I write in the FROM stage?

i got this picture, it said docker container does not need os,but use the host os,now docker build always need an os enter image description here

like image 623
chen suyin Avatar asked Dec 31 '19 04:12

chen suyin


People also ask

Does a Docker image need an OS?

docker container does not need an OS, but each container has one.

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.

Does every Docker image contain OS?

Not every container has an operating system inside, but every one of them needs your Linux kernel. Before going any further it's important to understand the difference between a kernel, an operating system, and a distribution. Linux kernel is the core part of the Linux operating system.

Do containers require an operating system?

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.


Video Answer


3 Answers

The containers on a host share the (host's) kernel but each container must provide (the subset of) the OS that it needs.

In Windows, there's a 1:1 mapping of kernel:OS but, with Linux, the kernel is bundled into various OSs: Debian, Ubuntu, Alpine, SuSE, CoreOS etc.

The FROM statement often references an operating system but it need not and it is often not necessary (nor a good idea) to bundle an operating system in a container. The container should only include what it needs.

The NGINX image uses Debian (Dockerfile).

In some cases, the container process has no dependencies beyond the kernel. In these cases, a special FROM: scratch may be used that adds nothing else. It's an empty image (link).

like image 87
DazWilkin Avatar answered Oct 19 '22 12:10

DazWilkin


No its not like that. To create any docker image using DockerFile, You need to start with a base docker image. That base docker image can be anything, Like an empty image as well, In the docker file in your example the FROM section says ubuntu, it means its assuming ubuntu as the base image. Its not always needed to have an OS as base image.

Follow this link - https://linuxhint.com/create_docker_image_from_scratch/ This will clear your doubts related to base image.

like image 9
Saurav Kumar Singh Avatar answered Oct 19 '22 11:10

Saurav Kumar Singh


now i got answer

the From stage import the software but not the OS with kernel

it just provide a platform for your application,the ubuntu,debian,centos you write in FROM stage is just a software,the true kernel does not have relationship with them.

so if your application can run dependent ,it must like hello-world ,just a binary-package,dont rely on any other library. but mostly you need an OS,because they have the library you need.

like image 3
chen suyin Avatar answered Oct 19 '22 12:10

chen suyin