Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

构建时要注意的

入口点

对于镜像来说,从位置上看,入口点( ENTRYPOINT )就是在镜像本身的位置上。

就是说,对镜像内部命令的调用,包括这个命令被 CMD 所设定的默认值,不论如何,都要依赖入口点的实现。

入口点支持你调用镜像里面的命令,你才能调用,不支持,镜像被传参啥都是白搭的。

可以 build 一个这样的镜像,然后常识用任何方式 run 它来试试:

FROM bash
ENTRYPOINT ["echo","heiheihei"]

你会发现,无论如何,结果都是一样的。

如果需要没有基础镜像,也就是说……要制作基础镜像,需要 FROM 一个空的东西,则需要:

FROM scratch
...

容器文件或者封口器的集群文件都是这么写。

(感谢 sealerio/sealer 的创作者 fanux 给予的提示。)

我不知道为什么是 scratch 这个单词,我不知道这和那个同名的幼儿编程软件是不是有什么关系……

这个是它的 dockerhub 页面: https://hub.docker.com/_/scratch/

里面大体意思说,虽然在人家 Hub 里有这么个镜像存储库,但它不可被拉取运行或者改名。

这个镜像是 docker 在自己 Hub 里的一个保留( reserved )镜像,保留就是占位的意思——不理解的话就想想「保留字」是什么含义来着😃。

总之,你不能用这个镜像,你也不能把别的镜像叫这个名字,你不能运行它,但你可以在 Dockerfile 里头写 FROM scratch ——然后人家就知道你现在不是要使用基础镜像而是要构建基础镜像了。

——强调它是个保留名称的目的就是在于强调,如果写 FROM scratch 在容器文件里,并不会导致真的拉取一个空镜像。那个镜像不能被拉取,而这是个特殊的名称,可以触发 docker 这样的容器应用做特殊的不同以往的事情。它并不会拉取镜像并且那个镜像也不能被拉取,这就是说它是 reserved name 而不是 some normal name 的意思,而且也正是通过如此,才有了基础镜像和非基础镜像的区别,不然如果 scratch 真的可以被拉去被运行就像别的镜像一样的话,那么,全 Docker 世界的基础镜像,不就只能有 scratch 它自己了嘛……😃

更多见: https://codeburst.io/docker-from-scratch-2a84552470c8