CentOS Docker镜像的目的是什么?

7 浏览
0 Comments

CentOS Docker镜像的目的是什么?

根据我所阅读和听到的有关Docker的一切,它的整个目的就是将应用程序封装起来,以便在任何计算机上运行。它通过将所需环境(工具/依赖项)打包到Docker镜像中来实现这一点。容器是镜像的一个实例。在Docker容器中没有运行操作系统。

那么,如果这一切都是真的,为什么会有这个存在:CentOS官方Docker镜像?我以为Docker镜像只是用于应用程序,而不是整个操作系统。

每当我实例化该镜像时,我得到一个附加到它上面的容器,看起来像一个正常运行的CentOS shell。

你可以自己试一下,看看我是什么意思:

  • Dockerfile内容:FROM centos:centos7
  • 构建镜像:docker build centos-img .
  • 运行容器:docker run -ti centos-img
  • 分离:ctrl+p, ctrl+q
  • 重新附加:docker attach <容器ID>

这真的看起来和感觉像是一个虚拟机。

如果我运行cat /etc/os-release,它甚至会显示我正在运行的是CentOS。

这到底是什么?我能够像使用虚拟机一样使用CentOS Docker镜像吗?有什么限制吗?

(令我困惑的是docker containers != VMs,然而,通过我的探索,我创建了一个看起来和感觉像虚拟机的Docker镜像。如果我可以运行一个行为完全像虚拟机的轻量级Docker镜像,为什么我还需要运行虚拟机?)


这个CentOS Docker镜像只是一个起始位置,我应该在其基础上构建(即将我的应用程序放入其中),以便它只作为我的应用程序的主机。我阅读和研究Dockerfile示例的越多,我越相信这个假设是正确的。


我真正想要做的是:

我有一堆作为一个系统一起运行的小应用程序/服务,它们组成了一个大型应用程序。我目前将这个系统运行在一个CentOS机器上。我希望能够轻松地运行多个实例的这个大型应用程序,每个实例都在自己的环境中运行/互不干扰。通过使用CentOS Docker镜像+所有所需的小应用程序/服务,可以实现这个目标,从而得到一个大型应用程序镜像?使用这个镜像,我可以启动多个容器,每个容器运行一个独立的大型应用程序实例?这样做是否合理/可行?


我的某些理解可能是错误的,或者我可能在建议以一种Docker不打算使用的方式使用Docker。如果是这样,请随时指出。谢谢!

0
0 Comments

如何使用CentOS Docker镜像的目的是什么?

这个问题的出现是因为有人想了解为什么要使用CentOS Docker镜像以及它的作用。解决方法是通过阐述容器的基本概念和最佳实践来回答这个问题。

容器基本上共享一个内核(通常是Linux),而不是操作系统(如CentOS、Debian、Ubuntu等)。最简单的Linux容器镜像被称为"scratch",它是空的,只提供了Linux内核。而完整的Linux操作系统镜像包括CentOS等,提供了用户和应用程序与在"裸机"或虚拟机上运行此操作系统时大致相同的体验。

在容器的最佳实践中,尽量接近"scratch"比接近"centos"更好。因为操作系统是一个庞大的代码集合,你的应用程序可能并不需要其中的大部分功能。虽然拥有所有这些额外的功能可能很好,但这意味着你必须维护(和保护)多余的代码,并且你的镜像也必须携带所有这些内容。

然而,你的应用程序可能无法在"scratch"上运行,因为它们可能依赖于其他应用程序和共享库。如果你已经对这些依赖有很好的了解,你可以从"scratch"这样的镜像开始,并添加你的应用程序所需的内容。

在网络上查看Dockerfile的示例,你会发现许多最佳实践示例都是从较小的基础镜像开始,添加必要的软件包,最后添加相关的二进制文件。

总之,使用CentOS Docker镜像的目的是为了在容器中提供一个类似于运行在"裸机"或虚拟机上的完整Linux操作系统的体验。但在实践中,最好使用更小的基础镜像,并根据应用程序的需求添加必要的组件。

参考链接:

- [Microcontainers -- Tiny, Portable Docker Containers](https://blog.iron.io/microcontainers-tiny-portable-containers/)

- ["Distroless" Docker Images](https://github.com/GoogleContainerTools/distroless)

0