Table of Contents
怎样写好dockerfile
- repeatble:应该是一个完整的运行时环境,任何人都可以build出一个行为一致的镜像。build好了可执行程序再拷贝进去的行为不可取
- 有意识地使用cache:这在build速度上会比较友好,比如项目只是更新代码而没有更新依赖,那么理论上应该不用每次都装依赖
- 精简的镜像:这事实上是个复杂的综合事项,见下方的说明
怎样打小的镜像
- 语言优势:比如go打的镜像,一般就是比较小,因为系统级别依赖几乎不用
- base image优势:比如以alpine为基础打的一般比用ubuntu打的要小,因为去掉了很多不必要的依赖。
就是第一次在构建的时候稍微花些力气装依赖(注意muslc的标准c库问题) - multi stage:感觉对编译型的语言比较适合,我用go的时候比较方便
- 各种小技巧:命令写成一行减少layer,删掉没用的安装cache等等
参考: