10.1. docker build命令和镜像构建过程

docker build 命令的其参数有3种类型( PATH-URL ),表示构建上下文( context )的3种来源。 这里的构建上下文(简称上下文)是指传入 docker build 命令的所有文件。一般情况下, 将本地主机的一个包含Dockerfile的目录中的所有内容作为上下文。上下文通过docker build命令传入到Docker daemon后, 便开始按照Dockerfile中的内容构造镜像。

Dockerfile描述了组装镜像的步骤,其中每条指令都是单独执行的。除了 FROM 指令, 其他每一条指令都会在上一条指令所生成镜像的基础上执行,执行完后会生成一个新的镜像层, 新的镜像层覆盖在原来的镜像之上从而形成了新的镜像。Dockerfile所生成的最终镜像就是在基础镜像上面叠加一层层的镜像层组建的。

为了提高镜像构建的速度,Docker daemon会缓存构建过程中的中间镜像。当从一个已在缓存中的基础镜像开始构建新镜像时, 会将Dockerfile中的下一条指令和基础镜像的所有子镜像做比较,如果有一个子镜像是由相同的指令生成的, 则命中缓存,直接使用该镜像,而不用再生成一个新的镜像。在寻找缓存的过程中,COPY和ADD指令与其他指令稍有不同, 其他指令只对比生成镜像的指令字符串是否相同;ADD和COPY指令除了对比指令字符串, 还要对比容器中的文件内容和ADD、COPY所添加的文件内容是否相同。此外,镜像构建过程中,一旦缓存失效, 则后续的指令都将生成新的镜像,而不再使用缓存。