Docker生成的镜像容量的问题


在使用docker时,在docker.io下载一个官方镜像,例如ubuntu,下载大小约为60+MB,解压后的大小约在180+MB,此时基于该镜像生成容器并提交,镜像的大小翻倍的增长,例如:

docker images | grep ubuntu

docker.io/ubuntu             latest              d2a0ecffe6fa        2 weeks ago         188.3 MB

docker images | grep base

ceph/base                    latest              f1342783254c        20 hours ago        403.7 MB


这是因为什么原因导致此种结果?
已邀请:

wonderflow - 浙大VLIS实验室

赞同来自: oilbeater


一般而言,使用Docker构建某个服务,使用Ubuntu/Centos之类的Linux发行版镜像是最省力的做法,因为里面什么指令都有,缺什么都可以用apt-get install安装,但是,一旦你使用apt-get update更新,然后安装了软件,这些软件都会有缓存之类的文件,同时软件本身也会有大小,最后都会算在镜像里面。

所以为了压缩镜像的大小,可以考虑删除容器里面你不需要的缓存文件,只安装最必须的软件,这个过程挺繁琐的。

如果单纯的追求镜像最小的话,可以把你要构建的服务生成二进制文件,然后使用“busybox”作为基础镜像,把二进制文件ADD进去,添加到环境变量中,把ENTRYPOINT设置为二进制文件的启动。这样做,你的镜像大约十几、二十M。

另外,如果没办法生成二进制文件的话,为了省事,最好去找官方库中别人做好的最接近你要构建的服务的镜像,这样人家一般会优化的比较好。

希望有所帮助。

tuxknight

赞同来自:


你生成容器后又进行了什么操作?
我这里docker run -ti ubuntu /bin/bash
然后什么都不做,直接退出,
重新commit的大小没有显著增加.

徐磊 - BlackOps@Qunar

赞同来自:


docker images --tree 先检查下你的镜像有没有增加额外的layerfs。

benpao

赞同来自:


简单看一下这个操作:

<pre>

docker run -it centos /bin/bash

# 原始大小

df -h

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/docker-253:0-135346865-2dc294392f48687afdc2ef40e31516a8e2deaa69a3317960d341c57f2f2643d5 9.8G 219M 9.0G 3% /
tmpfs 3.9G 0 3.9G 0% /dev
shm 64M 0 64M 0% /dev/shm
tmpfs 3.9G 0 3.9G 0% /run/secrets
/dev/mapper/centos-root 85G 2.2G 83G 3% /etc/hosts
tmpfs 3.9G 0 3.9G 0% /proc/kcore
tmpfs 3.9G 0 3.9G 0% /proc/timer_stats

# 安装 openssh-server

yum install openssh-server

Total download size: 961 k
Installed size: 2.5 M

# 查看安装后的占用空间

df -h

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/docker-253:0-135346865-2dc294392f48687afdc2ef40e31516a8e2deaa69a3317960d341c57f2f2643d5 9.8G 267M 9.0G 3% /
tmpfs 3.9G 0 3.9G 0% /dev
shm 64M 0 64M 0% /dev/shm
tmpfs 3.9G 0 3.9G 0% /run/secrets
/dev/mapper/centos-root 85G 2.2G 83G 3% /etc/hosts
tmpfs 3.9G 0 3.9G 0% /proc/kcore
tmpfs 3.9G 0 3.9G 0% /proc/timer_stats

exit

exit

# 查看镜像

docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2dc294392f48 centos:latest "/bin/bash" 3 minutes ago Exited (0) 4 seconds ago jolly_goodall

# 提交镜像

docker commit -m "test" -a "benpao" 2dc294392f48 benpao/test:latest

469efa9e902cc52cafa284f6c810269440c1dc2d5d7455285a84ea672a4a06d3

# 查看镜像

docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
benpao/tesst latest 469efa9e902c 7 seconds ago 238.1 MB
docker.io/centos latest 7322fbe74aa5 5 weeks ago 172.2 MB
</pre>

以上可以看到,基础镜像172.2MB,初始容器占用大小219MB,安装openssh-server后267MB,提交镜像238.1MB,容器增加48MB,镜像增加66MB。

要回复问题请先登录注册