软件包和 Docker 镜像之间的区别

软件包和 Docker 镜像之间的区别

我了解 PPA,但 Docker 对我来说很新。在包管理方面,Docker 和 Dockerfiles 与 Ubuntu 的个人包存档 (PPA) 有何不同?

答案1

软件包和容器镜像是两种避免冲突的分发软件的方式,尽管它们采用的方法截然不同。


套餐是由包管理器例如 RHEL 中的 RPM 或 Ubuntu 中的 APT,在将文件写入一个共享文件系统之前,会检查多个软件包是否使用了兼容的库、是否使用了相同的文件名等。然后用户就可以直接启动程序了。

包裹通常来自存储库,由运行存储库的人员决定哪个软件包可以控制每个文件名、网络端口、系统用户 ID 等,以及打包哪些版本的程序。软件包是根据列出应包含哪些文件的规范文件构建的。

购电协议(个人软件包档案)允许个人和小团体发布自己的软件包,适用于尚未被主存储库接受的软件。


容器是程序或程序组可以在其中运行的沙箱,与系统的其余部分隔离。由于 Linux 内核支持每个进程的命名空间,它们只能访问自己的文件(具有单独的根目录和挂载表)、网络接口等。(就像一种更全面的 chroot 形式。)

由于容器只能访问自己的文件,因此图片,构成容器初始状态的文件包。由于沙盒的存在,容器不需要像软件包那样进行协调。每个容器都包含所需的特定版本的库。

Docker是一个容器管理器:它从指定的图像启动容器,设置它们的网络接口,记录它们的输出等。

它还可以管理镜像:它可以从 Dockerfiles 脚本构建镜像,并将它们上传到Docker 中心,一组(大部分)由用户控制的存储库。


这两种方法可以结合起来:您可以基于最小 RHEL 或 Ubuntu 映像创建映像,并使用在容器内运行的 yum 或 apt-get 安装其中的软件包。

反过来也是可能的:一个包可以安装一个图像,虽然我没听说有人这样做。

当然,安装 Docker 最简单的方法是使用包管理器

同样,Puppet 和 Chef 等配置管理系统仍然发挥着作用:在内部设置容器,或控制哪些容器部署在哪些机器上并将它们全部连接在一起。

相关内容