Dockerfiles 最好的实践

集团共同运营

Docker 将图像构建为图层集合。每个图层只能添加数据,即使此数据表明文件已被删除。每条指令都会创建一个新图层。例如:

RUN apt-get -qq update
RUN apt-get -qq install some-package

有几个缺点:

  • 它将创建两个图层,从而生成更大的图像。
  • RUN 语句中单独使用 apt-get update 会导致缓存问题,随后 apt-get install 指令可能会失败。假设你稍后通过添加额外的包修改 apt-get install,然后 docker 将初始和修改的指令解释为相同并重新使用先前步骤中的缓存。因此,执行 apt-get update 命令,因为在构建期间使用了其缓存版本。

相反,使用:

RUN apt-get -qq update && \
    apt-get -qq install some-package

因为这只产生一层。

提到维护者

这通常是 Dockerfile 的第二行。它告诉谁谁负责,并将能够提供帮助。

LABEL maintainer John Doe <john.doe@example.com>

如果你跳过它,它不会破坏你的形象。但它也无助于你的用户。

要简明扼要

保持 Dockerfile 简短。如果需要进行复杂设置,请考虑使用专用脚本或设置基本映像。