Docker镜像压缩与优化
来源:互联网 发布:南昌宝德网络是干嘛的 编辑:程序博客网 时间:2024/05/22 17:31
现如今docker如此受人追捧,主要是因为它的轻量化、可以快速部署以及资源的利用。但是一个docker images质量的好与坏,主要取决于Dockerfile编写的质量。同样功能的镜像,但是不同的Dockerfile build出来的镜像大小是不一样的,这是因为docker是由一层一层的只读层累积起来的,而这每一层就是Dockerfile中的每一条指令,所以Docker image的大小完全取决于Dockerfile中的每条指令生成的中间层的大小,下面我们来举一个小例子来详细说明dockerimage的形成。
我们有一个Dockerfile:
FROM Ubuntu:14.04ADD run.sh /VOLUME /dataCMD [“./run.sh”]
这个简单的Dockerfile主要做的事情是:基于Ubuntu:14.04系统将run.sh放在根目录下,设置卷挂载点,然后在image启动的时候run脚本run.sh。下图就是形成的docker image:
很明显,由图我们可以看到,四条指令分别形成四个层,假设Ubuntu:14.04是150MB,run.sh是1MB的话,那么FROM Ubuntu:14.04层的大小就是150MB,ADD run.sh /层的大小即为1MB,而VOLUME /data层和CMD [“./run.sh”]由于没有加入文件等数据,也没有在系统中生成数据,所以该层的大小为0。所以整个image的大小就是151MB。在知道了docker image生成的原理之后,下面我们就来聊一下docker镜像的优化与压缩。
需要说明的一点就是:层数的多少在某些情况下是不会决定image的大小的,只有当Dockerfile中出现:
RUN yum install ***
RUN yum uninstall ***
的时候镜像是可以压缩优化的,因为上面这两句是安装一个工具,然后卸载掉,正常情况下我们感觉这样一安装一卸载大小就为0了,但是在docker image中不是这样的,RUN yum uninstall ***这一层只能是令上一层不可见,但是上一层的大小是不会变化的,所以,如果想达到0的效果,我们就需要将这两层压缩成一层,也就是这样写:
RUN yum install *** && \
yumuninstall ***
这样就会达到压缩镜像的效果。
所以,压缩镜像主要有两点:
1 选择一个较小的原镜像,也就是FROM后面的那个镜像尽量要小。
2 根据实际情况对Dockerfile中的层进行合并,具体情况就是如上述所说的情况,要知道并不是随便合并层就会达到效果的。
注:以上均为个人观点,如有不对,还请各位大神指点
- Docker镜像压缩与优化
- Docker 镜像优化与最佳实践
- Docker镜像与仓库
- docker、镜像与集装箱
- 优化Docker镜像大小方案
- [Docker]Docker镜像
- Docker镜像与容器命令
- docker 镜像与容器 概念认识
- Docker镜像的获取与使用
- Docker镜像与容器命令
- Docker镜像与容器命令
- docker 导入与导出镜像
- Docker镜像与容器命令
- docker镜像创建与基本使用
- docker容器与镜像管理方法
- Docker 容器与镜像清理汇总
- Docker镜像的获取与使用
- Docker镜像与容器的区别
- Bootstrap实用工具
- GSON的用法
- android studio的api level的修改
- ZOJ
- Java抽象类和抽象方法
- Docker镜像压缩与优化
- 未来的大神,从现在起
- 探索红黑树中的秘密
- 字符串的扩展
- localStorage详细介绍(与sessionStorage的区别)
- ZOJ
- 位图的实现及相关问题
- approxPolyDP-轮廓近似
- 分治,在平面上找距离最近的两个点