9. Docker引擎 - 写Dockerfile的最佳实践

通用的指导原则

  • 容器应该是朝生暮死的
    也就是容器应该可以随时被终止和销毁, 能够快速的使用一个新的容器替代老容器

  • 使用.dockerignore文件
    为了提高编译效率, 使用.dockerignore文件设置忽略文件

  • 避免安装不必要的软件包
    为了减小复杂性, 依赖关系, 文件尺寸和编译次数, 尽量避免安装额外的不必要的软件包

  • 每一个容器只允许一个进程
    将应用程序解耦为多个容器

  • 减少层数

  • 把多行参数排序, 如

RUN apt-get update && apt-get install -y \ 
 bzr \ 
 cvs \ 
git \ 
mercurial \ 
subversion
  • 编译缓存
    使用--no-cache=true可以不使用缓存

    缓存使用策略

    1. 如果基础镜像在缓存中, 那么下一条指令和该基础镜像的所有子镜像对比, 查看是否有使用完全相同的命令构建的子镜像, 如果有则使用缓存的子镜像, 否则缓存失效.
    2. 大部分的情况下简单的比较指令就完全够用了, 但是一些特殊的指令需要一些特殊的检查.
    3. 对于ADD和COPY指令, 镜像中的文件都会计算一个校验和, 但最近的修改和访问时间不会计算在校验和中, 然后与已有镜像中的文件对比, 如果有任何修改, 缓存就失效了
    4. 除了ADD和COPY指令, 缓存检查不会检查容器中的其他的文件进行缓存校验了

你可能感兴趣的:(9. Docker引擎 - 写Dockerfile的最佳实践)