我有一个关于容器镜像的问题,因为我正在学习更多有关容器和 Docker 的知识。
当我使用 Docker 时,我可以运行 Alpine 镜像。但我也可以运行 Node-alpine 镜像,该镜像的底层是基于 Apline 镜像的。
那么,以操作系统命名的镜像和以软件命名的应用程序镜像之间到底有什么区别呢?前者是该操作系统的库和工具集,而后者是该操作系统的库和工具集加上软件,例如在本例中是 Alpine 加上 Node.js 吗?
也许我的问题来自另一个问题:为什么会有以操作系统命名的图像?据我了解,这些图像只是该操作系统典型的库和工具的集合(没有内核,内核由主机操作系统提供),它们在容器中安装和运行。
我很乐意了解有关这些事情的更多数据,以便恰当地联系它们并更好地理解这个主题。
答案1
相同软件/不同 Linux 发行版之间的主要区别在于,在后一种情况下,您将获得相应操作系统的用户空间部分:
- 为了节点高山您在容器中获得 Alpine 用户空间,这主要意味着如果您想要进行一些修改,您将必须使用 apk 作为数据包管理器(但这种区别当然不是唯一的)。
- 为了节点破坏者您将获得 Debian 用户空间,并且必须使用 APT 进行图像修改(以及从 Debian 继承的所有奇怪的东西 - 标准软件配置文件的复杂性,这些文件被分成 9000 个包含文件然后疯狂地组织起来)和一个明显的更大的图像。
- 为了节点破坏者-瘦身你得到的结果几乎相同,但是图像作者努力使图像稍微变薄一些。
- 为了节点靶心您将获得 Debian 用户环境,但会获得它的更新版本(以及来自其嵌入式存储库的软件的更新软件版本)。
等等。