Docker 镜像其实本质是文件目录,包括 index 索引文件 (可选) 、配置文件、清单文件、一组文件系统层。配置文件里包含环境变量、挂载卷、暴露的端口等;清单文件中列出了构成镜像的层的信息。我们可以通过 docker manifest inspect 命令来查看镜像的配置文件、清单文件里的信息。
Dockerfile 是构建docker镜像的文件,里面Dockerfile是⼀个⽂本⽂件,其内包含了⼀条条的指令(Instruction),每⼀条指令构建⼀层,因此每⼀条指令的内容,就是描述该层应当如何构建。
构建镜像最具挑战性的一点是使镜像大小尽可能的小。Dockerfile中的每条指令都为图像添加了一个图层,您需要记住在移动到下一层之前清理任何不需要的工件。为了编写一个真正高效的Dockerfile,传统上需要使用shell技巧和其他逻辑来保持层尽可能小,并确保每个层都具有前一层所需的工件而不是其他任何东西。
为了解决编译和构建复杂的问题,减小镜像大小,17.05以后引入了Docker多阶段构建新特性,使用多阶段构建之后,对于多阶段构建,可以在Dockerfile中使用多个FROM语句。每个FROM指令可以使用不同的基础,并且每个指令都开始一个新的构建。可以选择性地将工件从一个阶段复制到另一个阶段,从而在最终image中只留下您想要的内容。
在使用Dockerfile构建Docker镜像需要注意的几点:
1.尽量选取满⾜需求但较⼩的基础系统镜像;
2.清理编译⽣成⽂件、安装包的缓存等临时⽂件;
3.安装各个软件时候要指定准确的版本号,并避免引⼊不需要的依赖;
4.添加.dockerignore⽂件或使⽤⼲净的⼯作⽬录.
Dockerfile的这样的脚本显而易见更容易被使用者接受,他明确的表明镜像是怎么产生的,有了Dockerfile当有定制额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成镜像即可。