怎样编写优雅、高效的Dockerfile

85 阅读1分钟

为什么要减小 Docker 镜像大小?

  • 安装不必要的软件包会增加攻击面,从而增加安全风险
  • 镜像传输需要更多时间
  • 部署大镜像需要更多时间

效率技巧

  • 编写FROM时选择合适的基础镜像,以减小镜像体积
  • 复用镜像底层缓存,提高容器生成效率。生成容器时,Docker 会按照镜像的一层一层叠加文件系统,假如已经有别的容器生成过某一层,Docker 可以复用
  • 使用多阶段构建,可以将构建环境和运行环境分隔开(最后阶段将基础镜像换成更小的,并COPY把可执行文件和依赖拷贝进下一层,以减少镜像整体大小)
  • 减少镜像层数(每执行FROMRUNCOPY都会创建一个单独的层),例如,可以将多行 Shell 命令都放在同一个RUN
  • 配置 .dockerignore 文件来忽略不需要文件
  • 使用 Docker Squash 压缩层数

优雅技巧

  • 需要多行 Shell 命令时,把这些命令编写到 Shell 脚本文件中。在 Dockerfile 中编写COPY把 Shell 脚本文件拷贝进镜像,再编写RUN执行