铛~铛~铛~Docker即将颠覆整个软件产业,从云计算平台到软件开发、测试,整个SDLC都会极度依赖Docker。

圈子里面一定有很多讨论Docker的话题,简而言之,Docker其实只解决一个问题:

  QA:程序无法启动!!!

  DEV:不可能,我的机器上可以运行

大家可以慢慢体会以上对话。但无论怎样,对于已经投入 SSD 怀抱的同学们来说,要在宝贵的SSD上存放50个大小为800MB左右不等的Docker Image 是绝对不可以接受的!!但偏偏从 Docker Hub上下载到的Image,大部分都是这个数字,甚至远大于这个。看着逐渐被Docker侵蚀的磁盘空间,楼主决定给Docker文件进行大瘦身。结果发现效果很显著,请看下图

颤抖吧,凡人!100MB 的 Redis 压缩到只有7MB !!!

首先纠正一下基本概念:

1. Docker 不是虚拟机 (切记)

2. Docker 里面的程序运行时不需要完整的操作系统!

3. CoreOS,RHEL, Ubuntu, CentOS,等等等,它们都是一个操作系统!

怎么做到的,基本就是以下几个步骤

1. 使用 Busybox 的 Install 命令创建一个最小化的系统环境

2. 删除不必要的各种系统文件,具体哪些是不必要的,那就得需要具体程序具体分析,楼主花了大量时间来分析每个程序,现在楼主几乎可以把这些APP的依赖项倒着背出来。

3. 将这些文件打包成 rootfs.tar

4. 使用 Dockerfile 的 ADD 指令用 rootfs.tar 生成 Image

楼主不码字了,开始码代码,

1. 基于 Redis 2.8.13 ,生成一个最简 rootfs.tar

 FROM redis:2.8.

 # switch to root to build image
# =================================================
USER root # prepare rootfs
# =================================================
RUN mkdir /rootfs
WORKDIR /rootfs
RUN mkdir bin etc dev dev/pts lib usr proc sys tmp
RUN mkdir -p usr/lib64 usr/bin usr/local/bin
RUN touch etc/resolv.conf
RUN cp /etc/nsswitch.conf etc/nsswitch.conf
RUN echo root:x:::root:/:/bin/sh > etc/passwd
RUN echo root:x:: > etc/group
RUN ln -s lib lib64
RUN ln -s bin sbin # install busybox
# =================================================
ADD http://busybox.net/downloads/binaries/1.21.1/busybox-x86_64 /sbin/busybox
RUN chmod +x /sbin/busybox
RUN cp /sbin/busybox bin
RUN busybox --install -s bin # extract redis-server
# =================================================
RUN cp /usr/local/bin/redis-server usr/bin/redis-server # extract redis-server's dependencies
# =================================================
RUN bash -c "cp /lib/x86_64-linux-gnu/lib{m,dl,pthread,c}.so.* lib64"
RUN cp /lib64/ld-linux-x86-.so. lib64/ # build rootfs
RUN tar cf /rootfs.tar .

Dockerfile

2. 使用这个 rootfs.tar 生成最小的Redis镜像文件

 FROM scratch
MAINTAINER e2tox <e2tox@microbox.io>
ADD rootfs.tar /
WORKDIR /data
VOLUME /data
# Define default command.
EXPOSE
ENTRYPOINT ["/usr/bin/redis-server"]
CMD ["--port", ""]

Dockerfile

3. 运行一下试试

docker run --rm -it -p : microbox/redis

这个方法生成出来的镜像和普通的redis镜像没有任何区别,尽情使用,楼主已经先行释放了30GB的空间了。

如果你还有更多的探索欲望,请移步楼主的开源项目 http://microbox.io

晚安

Docker 的 Image 太大,怎么变小?的更多相关文章

  1. PS 如何把大嘴变小嘴

    Photoshop整容教程:让MM美唇大嘴变小嘴 2009-06-17 14:15作者:佚名出处:天极网软件频道责任编辑:王健       下面就开始实际操作了.       1.首先从Photosh ...

  2. 部署的docker image总是太大,怎么办?

    sudo docker images REPOSITORY                        TAG                 IMAGE ID            CREATED ...

  3. Docker目录/var/lib/docker/containers文件太大

    Docker在不重建容器的情况下,日志文件默认会一直追加,时间一长会逐渐占满服务器的硬盘的空间,内存消耗也会一直增加,本篇来了解一些控制日志文件的方法. 查出占用磁盘较大的文件 Docker 的日志文 ...

  4. PDF太大怎么办?缩小PDF的4种常用方法

    PDF太大怎么变小?我们在平时学习或生活中经常需要上传或提交一些资料,现在网站都是默认需要提交PDF格式的电子文档,有时提交资料会提示超过系统大小,如何才能使PDF缩小呢? 一.在线压缩 首先搜索sp ...

  5. CSS3动画@keyframes图片变大变小颜色变化

    在我做公司官网的时候也会帮着写一些游戏的静态页,今天产品要求为了突出一个按钮,他要有颜色的变化而且要变大变小,然后我就在网上搜了下呼吸灯和其他的案例,写了个小damo,看着还有些魔性嘞. html: ...

  6. 【技术贴】xp任务栏字体变大变小

    今天远程到服务器上,发现任务栏字体变小了,百度了很久,发现百度就是个渣渣,什么答案都搜不到.就自己摸索了一下. 方法一: 桌面右击属性-外观-字体大小, 下拉匡 方法二 :桌面右击[属性]-[外观]- ...

  7. 使用Docker容器的十大误区

    转自:http://www.dockone.io/article/1264 对于用户来说,可能一开始在不了解的情况下会对容器报以拒绝的态度,但是在尝到容器的甜头.体验到它的强大性能之后,相信大家最终是 ...

  8. <实训|第十天>从底层解释一下U盘内存为什么变小的原因附数据恢复的基本原理

    [root@localhost~]#序言 我们平时不论是买一个U盘硬盘,或者自己在电脑上创建一个分区,大小总是比我们创建的要小一点,有些人会说,这个正常啊,是因为厂家规定的1M=1000k,真正的是1 ...

  9. [word]2010中插入公式自动编号并且公式不自动缩小/变小

    要实现在word2010中插入公式自动编号,就要用到自动图文集功能,具体操作如下: 1.先制定制表位位置:单击一个空白段落,然后双击标尺线的底部:这会激活"制表位"对话框,如图所示 ...

随机推荐

  1. [转]恢复 git reset -hard 的误操作

    转帖:http://hi.baidu.com/configuration/item/97fddeea252818d0eb34c964 有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 r ...

  2. 彩票号码OC呈现

    +(NSArray*)splitCode:(NSString*)code backzoneIndex:(NSInteger*)outIndex { /* 01 0102|0304 0102030405 ...

  3. Android.os.NetworkOnMainThreadException

    出现Android.os.NetworkOnMainThreadException错误提示的原因原因:不允许在主线程中进行网络访问解决办法:将网络访问的操作单独放到一个线程中

  4. SVN更新报错

    将服务器SVN文件更新到本地是出现下图错误 报错中已经提示可以通过clean up来清理,若直接执行release lock,则不会解决问题. 原因:本地的项目中存在过期的工作副本 解决办法:选择该文 ...

  5. 关于vue.js中条件渲染的练习

    html: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8 ...

  6. LeetCode-Sort Colors

    Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...

  7. makefile编写要点

    1.wildcard : 扩展通配符 2.notdir : 去除路径 3.patsubst :替换通配符 格式:$(patsubst <pattern>,<replacement&g ...

  8. 1.5 linux笔记

    fdisk /dev/sda   查看sda下硬盘状态 fdisk l 看LIST所有文件系统 fdisk n 创建分区 fdisk m help fdisk p 查看所有分区 fdisk w 保存分 ...

  9. (转)A Survival Guide to a PhD

    Andrej Karpathy blog About Hacker's guide to Neural Networks A Survival Guide to a PhD Sep 7, 2016 T ...

  10. windows下安装Composer

    1.下载https://getcomposer.org/composer.phar 2.复制到php.exe所在目录 3.在php.exe所在目录新建composer.bat文件 4.打开cmd,跳转 ...