Dockerfile 书写原则


Dockerfile 书写原则

1. 单一职责

由于容器的本质是进程,一个容器代表一个进程,因此不同功能的应用应该尽量拆分为不同的容器,每个容器只负责单一业务进程。

2. 提供注释信息

Dockerfile 也是一种代码,我们应该保持良好的代码编写习惯,晦涩难懂的代码尽量添加注释,让协作者可以一目了然地知道每一行代码的作用,并且方便扩展和使用。

3. 保持容器最小化

应该避免安装无用的软件包

4. 合理选择基础镜像

容器的核心是应用,因此只要基础镜像能够满足应用的运行环境即可。例如一个Java类型的应用运## 行时只需要JRE,并不需要JDK,因此我们的基础镜像只需要安装JRE环境即可

5. 使用 .dockerignore 文件

忽略一些不需要参与构建的文件,从而提升构建效率

6. 尽量使用构建缓存

Docker 构建过程中,每一条 Dockerfile 指令都会提交为一个镜像层,下一条指令都是基于上一条指令构建的。如果构建时发现要构建的镜像层的父镜像层已经存在,并且下一条命令使用了相同的指令,即可命中构建缓存
命中缓存的原则:

  1. 从当前构建层开始,比较所有的子镜像,检查所有的构建指令是否与当前完全一致,如果不一致,则不使用缓存
  2. 一般情况下,只需要比较构建指令即可判断是否需要使用缓存,但是有些指令除外(例如ADD和COPY)
  3. 对于ADD和COPY指令不仅要校验命令是否一致,还要为即将拷贝到容器的文件计算校验和(根据文件内容计算出的一个数值,如果两个文件计算的数值一致,表示两个文件内容一致 ),命令和校验和完全一致,才认为命中缓存

    7. 正确设置时区

    我们从 Docker Hub 拉取的官方操作系统镜像大多数都是 UTC 时间(世界标准时间)

    8. 使用国内软件源加快镜像构建速度

    9. 最小化镜像层数

    在构建镜像时尽可能地减少 Dockerfile 指令行数

文章作者: 彭峰
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 彭峰 !
  目录