dockerfile最佳实践
构建出来的镜像尽可能“小”
- 选择适合的尽量小的基础镜像
- 尽量让每个镜像的用途都比较集中、单一,避免构造大而复杂、多功能的镜像
- 过大的基础镜像会造成构建出臃肿的镜像,一般推荐比较小巧的镜像作为基础镜像
- 提供详细的注释和维护者信息
- Dockerfile也是一种代码,需要考虑方便后续扩展和他人使用
- 使用明确的具体数字信息的版本号信息,而非latest,可以避免无法确认具体版本号,统一环境
- 尽量减少镜像层的数目
- 减少镜像层数建议尽量合并RUN指令,可以将多条RUN指令的内容通过&&连接
- 不要安装不必要的包
- 构建后删除临时的包
- 选择适合的尽量小的基础镜像
让构建镜像过程尽可能“快”
- 使用清洁的构建上下文(build context)
- 及时删除临时和缓存文件,避免构造的镜像过于臃肿,并且这些缓存文件并没有实际用途;
- 利用构建时缓存(build cache)
- 合理使用缓存、减少目录下的使用文件,使用.dockeringore文件等
- 在开启缓存的情况下,内容不变的指令尽量放在前面,这样可以提高指令的复用性;
- 使用清洁的构建上下文(build context)
让镜像变得“好用”
- 选择官方基础镜像
- 设置正确的程序入口点
- 不要加入不必要的限制
让构建镜像变得”省事、省心“
- 选择高级别基础镜像
- 如果确实要从外部引入数据,需要制定持久的地址,并带有版本信息,让他人可以重复使用而不出错。
- 保持Dockerfile尽可能简单
- 使用经过安全扫描的基础镜像
- 选择高级别基础镜像