我已经有一些Docker的经验了,但是我建立的所有镜像都是基于其他镜像的。
我仍然不知道第一个Docker镜像是从哪里来的?
换句话说,如果我需要一个特定的镜像,比如Ubuntu,它与官方镜像差别很大,该怎么办?
20180928更新:
根据目前的回答和评论,似乎scratch
是最初的镜像。每个镜像都是从这个镜像构建而来的。所以问题来了:什么是scratch?你们能用通俗易懂的语言解释一下吗?
20180929更新:
根据评论中链接提供的信息,确实,构建FROM scratch
的镜像(例如,light/hello:latest)没有额外的文件,只有我们添加的文件。从light/hello:latest启动容器后,会出现除我们添加的文件之外的更多文件和目录。
现在我知道了,因为每个容器都必须有一个用于执行的根文件系统,所以这些额外的文件和目录是由容器运行时实现(runC/libcontainer)基于runC libcontainer规范v1创建的,该规范遵循OCI runtime规范。
现在回到我的困惑:什么是scratch?它是Docker保留的一些技巧吗?就像Java项目总是从一个主函数开始:public static void main(String[] args)
?
20181008更新:
现在我认为我应该首先弄清楚Docker镜像到底是什么。这怎么做呢?如果可能和必要,您可以在这里放一些源代码。请给我一些线索。
提前感谢您的帮助。