如果Docker没有封装操作系统,Docker Ubuntu Image中有什么内容?

时间:2016-08-30 21:33:06

标签: docker

我正在使用Docker启动一个新的Django项目。我很困惑Ubuntu Docker图像的存在,这在许多教程中都有提及,也是Docker Repo中最受欢迎的图像之一。

我认为Docker是一个内置于操作系统的容器化系统,为什么还有一个Ubuntu Docker Image呢?关于何时/谁将使用它的常见使用场景可能会有所帮助。

3 个答案:

答案 0 :(得分:2)

使用Linux发行版通常可以获得:

  • 加载内核的引导加载程序
  • 管理系统并加载init系统的内核
  • 设置并运行其他所有内容的init系统
  • 其他所有

Docker本身取代了大部分init系统 Docker图像取代了“Everything”,它仍然可以是任何正常发行版的很大一部分。

Ubuntu映像包含最小的Ubuntu二进制文件集和使用Ubuntu构建工具编译的共享库来运行shell,做一些正常的linuxy事情并使用apt包管理器。

Centos图像与Centos二进制文件,共享库和yum包管理器相同。等

Docker镜像不需要是完整的分发版。您可以在容器中运行single statically compiled binary,只需在图像中使用该二进制文件即可。

busybox图像是从单个静态二进制文件构建基本正常的Linux环境的一个很好的例子。

内核

所有容器共享一个主机内核。使用内核cgroup和名称空间将容器与系统的其余部分分开。对于容器中运行的任何东西,这似乎是它自己的系统。

所有版本的Linux都不使用完全相同的内核,而kernel interfaces are largely compatible允许Docker镜像的可移植性。 Docker本身需要3.10+内核才能运行,这缩小了内核可能性的范围。

可能有一些深奥的软件需要编译一些不能在不同的Docker主机上运行的深奥内核功能。这是非常罕见且易于识别的,因为您必须编译内核才能使所述软件正常工作。

答案 1 :(得分:1)

反过来说 - Docker真的只是一个关于类固醇的过程'。

接下来的问题是:""处理。为每个不同的Ubuntu版本安装Docker容器允许您使用每个版本附带的不同Django版本进行测试。

使用我在这里的Ubuntu图像和bash --version

的插图
$ docker run --rm -ti ubuntu:trusty bash --version | head -1
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
$ docker run --rm -ti ubuntu:vivid bash --version | head -1
GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)
$ docker run --rm -ti ubuntu:wily bash --version | head -1
GNU bash, version 4.3.42(1)-release (x86_64-pc-linux-gnu)
$ docker run --rm -ti ubuntu:xenial bash --version | head -1
GNU bash, version 4.3.42(1)-release (x86_64-pc-linux-gnu)
$ 

答案 2 :(得分:0)

您可以从头开始创建自己的图像。从字面上看,你的Dockerfile会像这样开始

FROM: scratch
...

但随后需要将运行程序所需的所有内容添加到映像中。这就是为什么从轻量级基础linux映像开始更为典型的原因,如Alpine(非常小,只有5MB)或Debian / Ubuntu(126MB)拥有您的应用所需的基本工具/服务。你想试着让你的最终图像变小。