【发布时间】:2018-10-30 09:45:49
【问题描述】:
我已经有一些 docker 经验,但是我构建的所有图像都是基于其他图像的。
我还是不知道第一个 docker 镜像是从哪里来的?
换句话说,如果我需要一个特定的图像,比如 ubuntu,它与官方图像完全不同怎么办?
20180928 更新:
根据目前的回答和评论,scratch 似乎是非常原始的图像。每个图像都是从它构建的。那么问题来了:什么是划痕?请各位大神用常用词解释一下好吗?
20180929 更新:
根据 cmets 中链接的信息,确实,FROM scratch 构建的图像(例如 light/hello:latest)没有额外的文件,而是添加了一些文件。从 light/hello:latest 启动容器后,除了我们添加的文件之外,还有更多的文件和目录。
现在我知道了,因为每个容器都必须有一个根文件系统才能执行,所以这些额外的文件和目录是由容器运行时实现(runC/libcontainer)基于 runC libcontainer 规范 v1 创建的,它遵循 OCI 运行时规范。
现在回到我的困惑:什么是划痕?这是 Docker 保留的一些技巧吗?就像 Java 项目一样,总是从一个 main 函数开始:public static void main(String[] args)?
更新 20181008:
现在我认为我应该弄清楚的第一个方法是 docker 图像实际上是什么。怎么可能呢?如果可能和必要,您可以在此处放置一些源代码。请给我亮光。
提前致谢。
【问题讨论】: