Dockerfiles最佳实践

示例

集团共同经营

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

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

有几个缺点:

  • 它将创建两个图层,从而产生更大的图像。

  • apt-get update在RUN语句中单独使用会导致缓存问题,随后的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简短。如果需要复杂的设置,请考虑使用专用脚本或设置基本映像。