图注:一张图掌握 Docker 命令 - 简化版
图注:一张图掌握 Docker 命令 - 完整版
在 docker 镜像的制作过程中,有不少方式可以减少容器的空间占用,甚至镜像可以精简 98%,精简 docker 镜像,既节省了存储空间,又能节省带宽,加快传输。
镜像层
在开始制作镜像前,首先了解镜像的原理,而这其中最重要的概念就是镜像层(Layers)
在 Dockerfile
中的每条指令都会创建一个镜像层,继而会增加整体镜像的大小。
|
|
在上面例子中,最终容器没有变回,但是新生成的镜像会比原生镜像大。
精简方法
|
|
通过这个例子,演示如何精简 docker 镜像大小。
1. 优化基础镜像
选用更小的基础镜像,在常用的 Linux 系统镜像中,Ubuntu、Centos、Debian中,debian 更为轻量。
2. 减少构建步骤
串联 Dockerfile 指令(一般为 RUN 命令)
3. 压缩镜像
- 使用命令或者工具压缩镜像
docker 自带的一些命令还能协助压缩镜像,比如 export 和 import
麻烦的是需要先将容器运行起来,而且这个过程中你会丢失镜像原有的一些信息,比如:导出端口,环境变量,默认指令。
下载安装
4. 使用最精简的基础镜像
使用 scratch 或者 busybox 作为基础镜像。
关于 scratch
- 一个空镜像,只能用于构建镜像,通过 FROM scratch
- 在构建一些基础镜像,比如 debian 、 busybox,非常有用
- 用于构建超少镜像,比如构建一个包含所有库的二进制文件
关于 busybox + 只有 1~5M 的大小 + 包含了常用的 UNIX 工具 + 非常方便构建小镜像这些超小的基础镜像,结合能生成静态原生 ELF 文件的编译语言,比如C/C++,比如 Go,特别方便构建超小的镜像。
5. 提取动态链接的 .so 文件
- 查看系统信息
|
|
- 打印共享的依赖库
|
|
- 打包需要的库文件
|
|
- 制作 Dockerfile
|
|