如果docker使用底层的linux操作系统,为什么要在Dockerfile的FROM行中指定操作系统

Joe*_*Joe 2 linux docker dockerfile

我在linux上看过,Docker使用底层的linux内核来创建容器.因此,这是一个优势,因为资源不会浪费在创建每个包含操作系统的虚拟机上.

但是,我很困惑,为什么大多数Dockerfiles在Dockerfile的FROM行中指定操作系统.我认为,因为它使用底层操作系统,所以不必定义操作系统.

我想知道如果指定的操作系统与运行它的机器的操作系统风格不匹配会发生什么.因此,如果机器是CentOS但Dockerfile FROM Debian:latest在第一行中,则是包含实际创建的Debian OS的虚拟机.

换句话说,这是否会导致性能下降,因为它需要创建包含指定操作系统的虚拟机?

lar*_*sks 8

但是,我很困惑,为什么大多数Dockerfiles在Dockerfile的FROM行中指定操作系统.我认为,因为它使用底层操作系统,所以不必定义操作系统.

我认为你的术语可能有点混乱.

Docker确实使用了主机内核,因为Docker只是一种隔离主机上运行的进程的方式(也就是说,它不是任何类型的虚拟化,也不能运行不同的操作系统).

但是,容器内可见的文件系统与主机无关.Docker容器可以从任何Linux发行版运行程序.因此,如果我在Fedora 24主机上,我可以通过启动我的Dockerfile来构建一个使用Ubuntu 14.04用户空间的容器:

FROM ubuntu:14.04
Run Code Online (Sandbox Code Playgroud)

在此容器中运行的进程仍在主机内核上运行,但整个用户空间来自Ubuntu发行版.这不是另一个"操作系统" - 它仍然是相同的Linux内核 - 但它是一个完全独立的文件系统.

我的主机运行的内核版本与您在实际的Ubuntu 14.04主机中找到的内核版本相差无几,这几乎无关紧要.将会有一些实用程序需要特定的内核版本,但只要内核"足够",大多数应用程序都不关心.

所以不,Docker中没有虚拟化.只是各种(进程,文件系统,网络等)的各种隔离.