应该使用哪个Docker基础映像在没有任何其他操作系统的容器中安装应用程序?

gex*_*tra 23 docker

我在我的GUEST OS上运行了一个Docker守护进程,它是CentOS.我想以一种孤立的方式安装软件服务,我不需要在我的Docker容器中使用另一个操作系统映像.

我想拥有一个Docker容器,只包含我要安装的软件应用程序的附加二进制文件和库.

我可以使用Docker中的"whiteglove/blank"基本图像吗?我想要一个非常精简的容器,它作为我的GUEST操作系统提供的起点.那可能吗 ?

Roh*_*ngh 30

您要求的东西不可能与Docker一起开箱即用.每个Docker镜像都有自己的根文件系统,需要安装某种操作系统.

你的选择是:

  1. 使用最小的基本映像,例如BusyBox映像.这将为您提供运行容器所需的绝对最小值.

  2. 使用CentOS基本映像,在这种情况下,您的容器将运行相同或非常类似的操作系统.

Docker镜像的原因是因为它们是可移植的.无论操作系统如何,任何Docker镜像都可以在Docker运行的任何地方运行.这意味着Docker镜像必须包含完整的根文件系统和操作系统安装.

如果您需要来自主机操作系统的东西,您可以使用Docker卷共享一个目录.但是,这通常意味着用于安装数据目录,并且仍然需要具有OS的Docker镜像.


也就是说,如果你有一个完全没有依赖关系的静态链接二进制文件,那么创建一个非常小的图像变得很容易.这被称为"微容器",尤其是Go非常适合生产这些产品.以下是关于微容器以及如何生产它们的进一步阅读.


如果您想要的只是容器的资源管理部分正在使用lxc-execute,您可以查看另一个选项,如本答案中所述.但是你也失去了所有其他漂亮的Docker功能.不幸的是,你要做的不仅仅是Docker的构建.


blu*_*hts 14

据我了解 docker,当您使用base image 时,您实际上并没有安装额外的操作系统。

它只是一种带有预装程序的目录结构,或者我们可以说是实际基本映像操作系统的文件系统。

在大多数情况下[单击此链接查看例外情况],当在 mac 和 windows 上使用时,docker 本身 [docker 引擎] 在 linux VM 上运行。

如果您对虚拟化感到困惑,那么 Docker Container 中并没有虚拟化。容器在主机操作系统内核之上的用户空间中运行。因此,容器和主机操作系统将共享相同的内核。

所以,总结一下:

  1. 将主机操作系统视为 windows 或 mac。
  2. Docker 安装后,位于在这些主机操作系统上运行的 linux VM 内。[使用此资源获取更多信息]
  3. docker 容器内的基本 linux 映像然后使用此 linux VM 机器作为主机操作系统,而不是本机 windows 或 mac。
  4. 在 linux 上,docker 容器目录中的基本 linux 映像使用主机操作系统,即 linux 本身,没有任何虚拟化。
  5. Docker Container 中的基础镜像只是那个 linux 发行版程序和工具的快照。
  6. 基本映像使用主机内核(在所有三种情况下都是 linux)。
  7. 因此,容器内没有虚拟化,但 docker 可以使用单个父 linux 虚拟机在其中运行自己 [docker 引擎]。

结论:当你在 docker 中安装基础镜像时,容器内没有安装额外的操作系统,而只是创建了包含最少程序和工具的文件系统副本。


Rez*_*a S 5

来自Docker的最佳实践:

尽可能使用当前的官方存储库作为图像的基础.我们建议使用Debian映像,因为它受到非常严格的控制并且保持极小(目前低于100 mb),同时仍然是完整的分发版.

您所要求的完全违背使用Docker容器的想法.您不希望 GUEST OS具有任何可靠性.如果你做Docker不会是便携式的.

创建容器时,您希望它在运行 Docker的任何计算机上运行.无论是CentoOS,Ubuntu,Mac还是Microsoft Azure :)

理想情况下,基本容器操作系统不必对您的主机操作系统执行任何操作.

  • 请注意,建议现已更改:“只要有可能,请使用当前的官方存储库作为图像的基础。我们建议使用Alpine图像,因为它受到非常严格的控制,并保持最小(当前小于5 mb),同时仍是完整发行版。 ” (2认同)