如何写一个最优的Dockerfile

  (TOC)

  

1。为什么要优化<代码> Dockerfile

  

我们如果使用<代码> Dockerfile> <代码> Dockerfile>   

2。优化方案

  

2.1减少镜像层数

  

最重要的因素是减少镜像的层数,这样能大大减小镜像的大小;
当然在减少层数和增加层数但能减少编译时长上,可以适当衡量。

  

如何写一个最优的Dockerfile

  
  

说明:   

      <李>码头工人镜像可以看出是分层的,分层方向与<代码> Dockerfile>   <李>码头工人镜像每一层是共享的,即同一台机器中,如果<代码> Dockerfile> Dockerfile>   <李>一层新的命令形成新的一层,如果涉及磁盘更新,而且没有在同一层删除,无论文件是否最后删除,都会带到下一层。   
     

基于上面的说明,层数越小,每一层大小越小,镜像总体就越小。

  

以下为一个示例,其优化原理是相邻的命令间用<代码>,和让其只形成一层。

  
 <代码类=" language-dockerfile "> #基础镜像
  从节点:10.16高山建设者
  
  #拷贝静态资源文件
  副本。/应用程序/#工作目录
  WORKDIR/应用程序
  
  纱线运行配置设置注册https://registry.npm.taobao.org \
  ,,纱sass-binary-site http://npm.taobao.org/mirrors/node-sass \配置集
  ,,全球增加http-server@0.9.0 \纱
  ,,纱安装\
  ,,纱构建
  
  #暴露端口
  80年公开
  
  #启动参数
  CMD [" http服务器”、“构建”、“p”,“80”)  
  

但是,有种情况是分层更优的,共目的是为了减少码头工人编译时间,比如:

  
 <代码类=" language-dockerfile ">从高山:最新
  
  # command1耗时久,且比较稳定
  运行command1
  # command2涉及更新内容频繁
  代码运行command2  之前
  

因为<代码> command1 耗时久,比如安装依赖包,而<代码> command2>   

2.2基于更小的镜像

  

在保证功能前提下,尽量使用更小的镜像。比如使用基于<代码>高山> 高山标记的镜像。
还有使用谷歌Distroless

  

高山Linux是:一个基于组织libc和busybox的面向安全的轻量级Linux发行版。
换句话说,它是一个体积更小也更安全的Linux发行版。

  

比如以下示例,选择带<代码>高山

  
 <代码类=" language-dockerfile ">从节点:lts-alpine
  
  运行的apk, no - cache添加ca证书卷发git \
  ,,rm射频/var/cache/apk/* \
  ,,update-ca-certificates  
  

2.3在每一层清理产生的垃圾文件或临时文件

  

以下整理了常用的基础镜像的清理命令:

           基础镜像   清理命令               <代码>高山   <代码> rm射频/var/cache/apk/*         <代码> centos /<代码> oraclelinux> rm射频/var/cache/yum/*         ubuntu <代码> /<代码> debian> apt autoclean - y,和apt autoremove - y,和rm射频/var/lib/apt/*                  

仍然是这个示例,以下含有删除缓存命令<代码> rm射频/var/cache/apk/*

  
 <代码类=" language-dockerfile ">从节点:lts-alpine
  
  运行的apk, no - cache添加ca证书卷发git \
  ,,rm射频/var/cache/apk/* \
  ,,update-ca-certificates  
  

2.4使用

如何写一个最优的Dockerfile