参考:https://docs.docker.com/develop/develop-images/multistage-build/
背景
过大的image占用更多的磁盘空间,push或者pull操作时占用更多的网络带宽,花费更长的时间。大规模的部署过程可能需要数个小时,大部分时间浪费在image的push与pull操作中,甚至因为短时间内流量的爆发而引起网络问题,最终导致部署失败。因此,我们应该尽量构建更小尺寸的image。
Iamge的构建过程写在Dockerfile文件中,文件中的每一条指令都会叠加一个新的层。相应地,缩小image的方法有两个,一个是尽量减少Dockerfile中指令的条数,指令条数越少,image中的层数就越少。另一个是精简每层的内容,使之只包含必要的东西。
为此在写Dockerfile时往往会利用SHELL脚本技巧,将多条命令连接成一条命令,并在其中加入一些逻辑。另外,可以将同一个image的Dockerfile分成两份,一个Dockerfile供开发者使用,里边包含开发套件、各种工具、运行时环境等一切构建、运行所需要的东西。另一个Dockerfile供部署人员使用,里边只包含开发者构建好的成果物及运行时环境,删除了开发套件、工具等开发人员才需要的东西,称之为建造者模式(builder pattern)。
构建者模式(builder pattern)
一个建造者模式的例子,首先有两份image构建文件,名称分别为Dockerfile.build、
Dockerfile。
D