包和 Docker 镜像的区别

pau*_*ube 3 package-management docker

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

小智 10

包和容器镜像是在避免冲突的同时分发软件的两种方式,尽管它们使用完全不同的方法。


是由包管理器安装的文件如 RHEL 中的 RPM 或 Ubuntu 中的 APT),在将文件写入一个文件之前,它会检查以确保多个包使用兼容的库、不使用相同的文件名等共享文件系统。然后用户可以直接启动程序。

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

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


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

因为容器只能访问它自己的文件,所以有图像、文件包构成了容器的初始状态。由于沙盒,不需要与包相同的协调。每个容器都包含它需要的特定版本的库。

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

它还管理镜像:它可以从称为 Dockerfiles 的脚本构建它们,并将它们上传到Docker Hub并从Docker Hub下载它们,Docker Hub是一组(主要是)用户控制的存储库。


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

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

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

同样,像 Puppet 和 Chef 这样的配置管理系统仍然有一些角色:在内部设置容器,或者控制将哪些容器部署在哪些机器上并将它们连接在一起。