《基于Kubernetes的容器云平台实战》——3.3 Dockerfile优化
3.3 Dockerfile优化
虽然Dockerfile文件的编写语法比较简单,但是如何写出一个高质量的Dockerfile也不是一件容易的事情,本节主要介绍编写一个好的Dockerfile要遵循的规范、检查项目、实例及优化工具。
3.3.1 Dockerfile检查项
如何判断一个Dockerfile是最优的,一般要考虑如下因素:
Dockerfile文件通俗易懂,可读性好。Dockerfile文件不宜过长,如果过长需要考虑分成多个Dockerfile。
构建过程执行速度快,对执行环境要求低。
构建出的镜像文件小,不含冗余的内容。
构建出的Docker镜像包含的分层尽可能少。
为了编写出最优的Dockerfile,需要根据下面的checklist进行检查,不符合要求的需要改正。
1)Dockerignore文件。检查是否有.dockerignore文件,以及该文件中是否过滤掉了不用的文件。
2)容器进程数量。一般情况下一个容器只执行一个进程,如果有极其特殊原因需要使用多个进程,则需要考虑多个进程间是否互相影响,可以考虑使用supervisor进行多进程管理。
3)Dockerfile指令。
使用workdir设定当前工作目录。
run指令。多个顺序执行的run指令需要合并,以减少镜像的层次及提高Dockerfile的可读性;run指令执行完后需要删除冗余的文件,确保制作出的镜像文件简洁。
合理调整copy与run的顺序。我们应该把变化最少的部分放在Dockerfile的前面,这样可以充分利用镜像缓存。
环境变量。Docker容器运行时很有可能需要一些环境变量,在Dockerfile中设置默认的环境变量是一种有效的方案。
4)基础镜像。如果有技术储备,建议自己制作基础镜像;如果自己不能制作基础镜像,建议选用成熟的基础镜像,镜像包尽可能小;使用基础镜像时建议写上镜像版本,防止镜像更新时latest标签会指向不同的镜像,这时构建镜像有可能失败。
- 点赞
- 收藏
- 关注作者
评论(0)