当我的主机安装了我需要的所有软件时,为什么要提供Linux发行版作为Dockerfile库?

当我的主机安装了我需要的所有软件时,为什么要提供Linux发行版作为Dockerfile库?,docker,dockerfile,Docker,Dockerfile,我想开始写一个Docker图像。我有一个.NETCore2.0WebAPI服务,已经部署到AmazonLinux机器上。它运行得很好,但我想自动化一点构建和部署过程 就我而言,我需要构建的映像不需要父映像。我可能会从某个位置获取一些文件,运行一些dotnetcli命令,并使用Apache作为反向代理运行服务。我真的不认为有必要在任何一个家长的形象 我问这个问题是因为我看到的大多数示例都包含一个基本图像。大多数情况下,它是非常通用的,比如“来自Ubuntu”。我已经读到,大多数图像将包括一个父图像

我想开始写一个Docker图像。我有一个.NETCore2.0WebAPI服务,已经部署到AmazonLinux机器上。它运行得很好,但我想自动化一点构建和部署过程

就我而言,我需要构建的映像不需要父映像。我可能会从某个位置获取一些文件,运行一些dotnetcli命令,并使用Apache作为反向代理运行服务。我真的不认为有必要在任何一个家长的形象

我问这个问题是因为我看到的大多数示例都包含一个基本图像。大多数情况下,它是非常通用的,比如“来自Ubuntu”。我已经读到,大多数图像将包括一个父图像。根据Docker的文件:

父图像是图像所基于的图像。它引用Dockerfile中FROM指令的内容。Dockerfile中的每个后续声明都会修改此父映像。大多数DockerFile从父映像开始,而不是从基础映像开始。然而,这些术语有时可以互换使用


从Ubuntu继承到底有什么意义?即使Docker文档也建议使用Debian,“因为它的控制非常严格,并且保持最小”。这只是确保你的Linux机器有一个Ubuntu发行版吗?即使我使用Amazon Linux,但使用Debian映像作为我的基础,这也有关系吗?

Docker映像运行在一组文件系统名称空间中,这些文件系统名称空间与主机名称空间没有连接,除非您选择绑定装载卷。这意味着主机上安装的工具对容器不可用:仅因为主机运行Amazon Linux并不意味着Amazon Linux提供的用户空间命令(以及这些命令用于运行的库)可供来宾使用

如果容器中没有Linux发行版,就不会有包管理工具(
yum
apt get
,等等)来安装下载文件、运行软件(可能需要链接到libc、OpenSSL副本或其他共享组件)所需的工具。Linux系统也有运行时部分,如解析器,由发行版在userland中提供,而不是在Docker安装中从主机共享

使用基本映像可以确保容器中有可用的工具,并且可以确保容器在具有兼容内核和硬件体系结构的任何Linux系统上都能始终如一地工作


从理论上讲,从主机绑定挂载许多工具是可能的(比如将所有的
/usr
作为一个卷公开),但这样做会挫败Docker在可移植性方面提供的许多优势。

如果您不是来自发行版,您希望从哪里获得任何软件?假设您正在运行apachehttpd。实际上,您需要有一个libc才能链接到它,一个OpenSSL的副本。见鬼,如果你没有
apt-get
(或
yum
或其他软件包管理器),你就不能
apt-get-install-apache
,而且你的发行版提供的所有东西……你能得到的最接近于没有发行版的东西是这样的,甚至那仍然是一个发行版(只是一个在编译时完全按照您的规范构建所有内容而不涉及二进制软件包的版本)。(当然,有,但如果您想知道使用真正的发行版的意义何在……尝试使用它。良好的学习体验,但不能帮助您完成实际工作)@CharlesDuffy我想我只是想澄清一下。仅仅因为我运行的是Amazon Linux并不意味着我的容器是,通过包含Linux发行版映像,我确保我的容器作为Debian发行版运行?这是有道理的。对——仅仅因为你的主机运行的是Amazon Linux并不意味着你的容器有Amazon Linux用户区。a容器从主机获得的所有信息都是它的内核。