我想开始编写Docker镜像。我有一个.net Core 2.0 Web Api服务,我已部署到Amazon Linux机器上。它运行正常,但我想稍微自动化构建和部署过程。
就我而言,我不需要为我需要构建的图像创建父图像。我可能从一个位置获取一些文件,运行一些dotnet CLI命令,并使用Apache作为反向代理运行该服务。我真的没有看到任何一个父图像的需要。
我问这个问题,因为我见过的大多数例子都包含基本图像。大多数时候它的东西非常通用,比如"来自Ubuntu"。我已经读过大多数图像都包含父图像。根据Docker的文档:
父图像是图像所基于的图像。它引用Dockerfile中FROM指令的内容。 Dockerfile中的每个后续声明都会修改此父图像。大多数Dockerfiles都是从父图像开始,而不是从基本图像开始。但是,这些术语有时可以互换使用。
从Ubuntu继承的重点是什么?甚至Docker文档都建议使用Debian"因为它受到非常严格的控制并且保持最小化#34;这只是确保您的Linux机器具有Ubuntu发行版吗?如果我使用的是亚马逊Linux但是使用Debian图像作为我的基础,这是否重要?
答案 0 :(得分:4)
Docker镜像在一组文件系统命名空间中运行,这些命名空间与主机没有连接,除非您选择绑定安装卷。这意味着主机上安装的工具对容器不可用:仅仅因为主机运行Amazon Linux并不意味着Amazon Linux提供的用户空间命令(以及这些命令用来运行的库)是可供客人使用。
如果容器内没有可用的Linux发行版,您将无法使用软件包管理工具(yum
,apt-get
等)来安装下载文件所需的工具,运行软件(可能需要链接到libc,OpenSSL的副本或其他共享组件)。还有一个正在运行的Linux系统的运行时部分,例如解析器,由发行版在用户空间提供,而不是在Docker安装中从主机共享。
使用基本映像可确保您的容器中有可用的工具 - 和它可确保该容器在具有兼容内核和硬件架构的任何Linux系统上保持一致。
理论上可以从主机绑定安装许多工具(通过将所有/usr
暴露为卷),但这样做会破坏Docker在可移植性方面提供的许多优势。