我们的一个项目有一个Dockerfile
,其中包含如下代码:
RUN apt-get install -y PACKAGE1 PACKAGE2 PACKAGE3 etc
这相当于:
RUN apt-get install -y PACKAGE1
RUN apt-get install -y PACKAGE2
RUN apt-get install -y PACKAGE3
etc
后一种方法使用更多字符,但它更明确,并且(至少对我来说(更容易扫描和可视化调试。例如,您可以查找重复的包或添加有关为什么需要特定包的注释。
像这样将所有内容塞在一条线上是否有技术优势?
如果使用第二种方法,您将以一个大的 Docker 映像结束,因为每个运行命令都会在您的映像中创建一个新层。
另一方面,第一个命令只会为图像再创建一个图层。
看到这个和这个
第二种方法的优点是,如果重新构建映像,则会重复使用构建的映像层。每一层对应Dockerfile数据操作指令。Docker 缓存未更改的构建层,并根据 Dockerfile 指令仅重建已更改的层和之后的层。因此,数据操作指令应根据作数据的可变性进行排序。例如,像源代码复制这样的Dockerfile指令应该是最后的。