我在Linux上读过,Docker使用底层的linux内核来创建容器。所以这是一个优势,因为创建每个包含操作系统的虚拟机都不会浪费资源。
但是,我很困惑,为什么大多数Dockerfiles在Dockerfile的FROM行中指定操作系统。我认为因为它使用底层操作系统,所以不必定义操作系统。我想知道如果指定的操作系统与其运行的机器的操作系统风格不匹配,实际会发生什么。因此,如果机器是CentOS但Dockerfile在第一行中有FROM Debian:latest
,则是包含实际创建的Debian OS的虚拟机。
换句话说,这是否会导致性能下降,因为它需要创建一个包含指定操作系统的虚拟机?
答案 0 :(得分:7)
但是,我很困惑,为什么大多数Dockerfiles指定了OS中的操作系统 从Dockerfile的FROM行。我认为,因为它正在使用 基础操作系统,然后不必定义操作系统。
我认为你的术语可能有点混乱。
Docker确实使用主机内核,因为Docker只是一种隔离主机上运行的进程的方式(也就是说,它不是任何类型的虚拟化,它可以&# 39;运行不同的操作系统)。
但是,容器中可见的文件系统与主机没有 nothing 。 Docker容器可以从任何Linux发行版运行程序。因此,如果我在Fedora 24主机上,我可以通过启动我的Dockerfile来构建一个使用Ubuntu 14.04用户空间的容器:
FROM ubuntu:14.04
在此容器中运行的进程仍在主机内核上运行,但整个用户空间来自Ubuntu发行版。这不是另一个"操作系统" - 它仍然是相同的Linux内核 - 但它是一个完全独立的文件系统。
我的主机运行的内核版本与您在实际的Ubuntu 14.04主机中运行的内核版本不同,几乎无关紧要。将会有一些实用程序需要特定的内核版本,但只要内核足够及时,大多数应用程序都不在乎。#/ p>
所以不,Docker中没有虚拟化。只是各种(进程,文件系统,网络等)的各种隔离。