Docker:基础镜像

问题描述 投票:0回答:3

据我了解,Docker 镜像(以及容器)可以从不同的 Linux 发行版实例化,例如 Ubuntu、CentOS 等。

假设我在主机上运行标准 Ubuntu 14.04,

  • 如果我使用不基于相同分配的容器会发生什么?
  • 不是14.04?
  • 不是 Ubuntu(或任何其他基于 Debian 的)?
  • 使用您所使用的图像的不同基础图像有哪些缺点? (假设我使用使用Ubuntu作为基础镜像的镜像A,使用Debian作为基础镜像的镜像B以及使用CentOS作为基础镜像的镜像C)?

额外问题:如果开发人员没有在 Docker 中心描述中指定它,我如何知道用于镜像的基础镜像?

docker dockerfile docker-image
3个回答
9
投票

Docker 使用 LXC(自 Docker 0.9 起不再使用),而是使用 libcontainer(现在

runc
),这是一个内置执行驱动程序,可操作命名空间、控制组、功能、apparmor 配置文件、网络接口和防火墙规则 – 全部以一致且可预测的方式进行,并且不依赖于 LXC 或任何其他用户层包。

docker 镜像代表一组文件,winch 将作为容器在自己的内存、磁盘和用户空间中运行,同时访问主机内核。
这与虚拟机不同,虚拟机不访问主机内核,但通过其虚拟机管理程序包含自己的硬件/软件堆栈。
容器只需在主机中设置限制(磁盘、内存、CPU)。实际的虚拟机必须构建一个全新的主机。

docker 镜像(文件组)可以是任何东西,只要:

这意味着镜像可以是“任何东西”:另一个 Linux 发行版,甚至是单个可执行文件。例如,在 go (https://golang.org/) 中编译的任何可执行文件都可以打包在自己的 docker 镜像中,无需任何 Linux 发行版: FROM scratch COPY my_go_exe / ENTRYPOINT /my_go_exe

scratch

是“空”映像,go可执行文件是静态链接的,因此它是独立的,仅依赖于对内核的系统调用。

    


6
投票

理论上,Linux内核是向后兼容的。只要主机内核比容器内核更新,它就应该可以工作。

从操作角度来看,每次开始时都依赖于不同的基础映像,这是您需要监视更新和安全问题的另一个依赖项。当发现下一个重大漏洞时,对一个发行版进行标准化可以减少运维团队的工作量。

Docker 使用 LXC,这是一种操作系统级虚拟化方法,用于使用单个 Linux 内核在控制主机上运行多个隔离的 Linux 系统(容器)。


1
投票

在 Docker 中,容器是由层构建的。 Dockerfile 中的每个步骤(命令)代表一层,一层一层地应用。第一步是应用基础操作系统层,用

FROM

表示。

因此,要回答您的额外问题,您可以查看正在使用的容器的

Dockerfile
内部(这是 DockerHub 上的第三个选项卡),并在第一个语句中查看,这是基本映像 (os)。


© www.soinside.com 2019 - 2024. All rights reserved.