如何精简Docker镜像

精简Docker镜像的五种通用方法 精简 Docker 镜像的好处很多,不仅可以节省存储空间和带宽,还能减少安全隐患。优化镜像大小的手段多种多样,因服务所使用的基础开发语言不同而有差异。本文将介绍精简 Docker 镜像的几种通用方法。 精简 Docker 镜像大小的必要性 Docker 镜像由很多镜像层(Layers)组成(最多 127 层),镜像层依赖于一系列的底层技术,比如文件系统(filesystems)、写时复制(copy-on-write)、联合挂载(union mounts)等技术,你可以查看Docker 社区文档以了解更多有关 Docker 存储驱动的内容,这里就不再赘述技术细节。总的来说,Dockerfile 中的每条指令都会创建一个镜像层,继而会增加整体镜像的尺寸。 下面是精简 Docker 镜像尺寸的好处: 减少构建时间 减少磁盘使用量 减少下载时间 因为包含文件少,攻击面减小,提高了安全性 提高部署速度 五点建议减小Docker镜像尺寸 一、优化基础镜像 优化基础镜像的方法就是选用合适的更小的基础镜像,常用的 Linux 系统镜像一般有 Ubuntu、CentOs、Alpine,其中 Alpine 更推荐使用。大小对比如下: Alpine 是一个高度精简又包含了基本工具的轻量级 Linux 发行版,基础镜像只有 4.41M,各开发语言和框架都有基于 Alpine 制作的基础镜像,强烈推荐使用它。 查看上面的镜像尺寸对比结果,你会发现最小的镜像也有 4.41M,那么有办法构建更小的镜像吗?答案是肯定的,例如 http://gcr.io/google_containers/pause-amd64:3.1 镜像仅有 742KB。为什么这个镜像能这么小?在为大家解密之前,再推荐两个基础镜像: 1、scratch 镜像 scratch 是一个空镜像,只能用于构建其他镜像,比如你要运行一个包含所有依赖的二进制文件,如Golang 程序,可以直接使用 scratch Read more…