Dockerfile编写规范

Dockerfile

   Dockerfile是由一系列命令和参数构成的脚本,一个Dockerfile里面包含了构建整个image的完整命令。Docker通过docker build执行Dockerfile中的一系列命令自动构建image。
   Dockerfile其语法非常简单,详情参考实践文档

规范

  1. 精简原则,减少代码复杂性以及相关依赖关系和大小
  2. 构建缓存,若不想使用缓存,可通过docker build --no-cache=true命令
  3. 对于From,尽量使用官方的镜像作为基础
  4. 对于特定容器,可以使用标签进行定义,标签以键值对形式出现,若包含空格,则用“包括,若标签对象不唯一,则后者会覆盖前者。
  5. Run命令不易过多过长,命令过长可以用\换行,多个命令最好不要分开执行,浪费资源并且费时
  6. 如需要安装软件包,最好将apt-get upgrade和apt-get install结合使用,类似于清除缓存的作用,避免安装到缓存内过时的版本,如单独使用,kennel导致缓存失效或者后续安装指令失败。
  7. 如果想镜像构建过程中产生任何错误都失败则应避免使用|而转为用&&
  8. 端口暴露尽量使用传统端口,比如Apache Web 的80
  9. 习惯为容器添加环境变量,通常用于为应用程序提供必要的版本信息和环境变量
  10. 对于ADD和COPY,两者类似,但是COPY透明度更高,ADD支持将文件解压以及对于URL的使用,但是对于镜像来讲大小格外重要,所以应该尽量使用curl或者wget代替ADD来进行远程对包的提取,所以对于大多数不需要进行tar自动提取的项目来讲,建议始终使用COPY,并将之放置于最后,可以有效减少缓存无效的数量
  11. ENTRYPOINT的最好用途是设置镜像的主命令,用CMD作为参数,这样就可以像是镜像命令一样运行。如:ENTRYPOINT["s3cmd"]
    CMD ["--help"]
    实际运行时也可以通过命令行覆盖CMD参数
  12. WORKDIR,应当使用绝对路径作为WORKDIR,便于阅读并且易于维护

猜你喜欢

转载自blog.csdn.net/weixin_34233618/article/details/87230597