Friday 15 June 2012

Ubuntu14.04 vs Ubuntu12.04 docker images -



Ubuntu14.04 vs Ubuntu12.04 docker images -

i have docker image based on ubuntu12.04 image. want migrate of them based on ubuntu14.04. ubuntu14.04 image 120 mb bigger ubuntu12.04 image.

anybody knows why , how cut down ubuntu14.04 image

running docker images

myregistry/ubuntu 14.04 xxx xxx 225.4 mb myregistry/ubuntu 12.04 xxx xxx 103.9 mb

the first problem see haven't shown how arrived @ images have. non-root registry ("myregistry") , you've omitted hash copy/paste exercise.

when download images, here's see:

winesoaked$ docker pull ubuntu:12.04 pulling repository ubuntu b45a6cbea6d1: download finish 511136ea3c5a: download finish 0b825e3a3d82: download finish 3327dfd9dc7d: download finish 4e284c9e0a9e: download finish ae9570f7a92a: download finish acc75c8f0e1d: download finish winesoaked$ docker pull ubuntu:14.04 pulling repository ubuntu 6b4e8a7373fe: download finish 511136ea3c5a: download finish b18d0a2076a1: download finish 67b66f26d423: download finish 25c4824a5268: download finish 8b1c48305638: download finish c900195dcbf3: download finish winesoaked$ docker images repository tag image id created virtual size ubuntu 14.04 6b4e8a7373fe 6 days ago 194.9 mb ubuntu 12.04 b45a6cbea6d1 6 days ago 112.3 mb

you'll notice 2nd hash in each of pulls same. that's base of operations image these built on. rest have dockerfiles used build them. let's go have look, shall we?

here's dockerfile 12.04:

from scratch add together precise-core-amd64.tar.gz / # few minor docker-specific tweaks # see https://github.com/dotcloud/docker/blob/master/contrib/mkimage/debootstrap run echo '#!/bin/sh' > /usr/sbin/policy-rc.d \ && echo 'exit 101' >> /usr/sbin/policy-rc.d \ && chmod +x /usr/sbin/policy-rc.d \ \ && dpkg-divert --local --rename --add /sbin/initctl \ && cp -a /usr/sbin/policy-rc.d /sbin/initctl \ && sed -i 's/^exit.*/exit 0/' /sbin/initctl \ \ && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \ \ && echo 'dpkg::post-invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \ && echo 'apt::update::post-invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \ && echo 'dir::cache::pkgcache ""; dir::cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \ \ && echo 'acquire::languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \ \ && echo 'acquire::gzipindexes "true"; acquire::compressiontypes::order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes # delete apt list files since they're big , stale run rm -rf /var/lib/apt/lists/* # forces "apt-get update" in dependent images, # enable universe run sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list # upgrade packages now, since tarballs aren't updated plenty run apt-get update && apt-get dist-upgrade -y && rm -rf /var/lib/apt/lists/* # overwrite 'cmd []' in dependent dockerfile cmd ["/bin/bash"]

each of commands in dockerfile corresponds 1 of hashes, intermediate images comprise aufs file system. wit:

511136ea3c5a corresponds from scratch 0b825e3a3d82 corresponds add precise-core-amd64.tar.gz... 3327dfd9dc7d goes epic-long run 4e284c9e0a9e goes run rm -rf /var/lib/apt/lists/* ae9570f7a92a goes run sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list acc75c8f0e1d goes wit hthe run apt-get update && apt-get dist-upgrade -y && rm -rf /var/lib/apt/lists/* , b45a6cbea6d1 corresponds resulting image.

you can break downwards 14.04 image, based on dockerfile:

from scratch add together trusty-core-amd64.tar.gz / # few minor docker-specific tweaks # see https://github.com/dotcloud/docker/blob/master/contrib/mkimage/debootstrap run echo '#!/bin/sh' > /usr/sbin/policy-rc.d \ && echo 'exit 101' >> /usr/sbin/policy-rc.d \ && chmod +x /usr/sbin/policy-rc.d \ \ && dpkg-divert --local --rename --add /sbin/initctl \ && cp -a /usr/sbin/policy-rc.d /sbin/initctl \ && sed -i 's/^exit.*/exit 0/' /sbin/initctl \ \ && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \ \ && echo 'dpkg::post-invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \ && echo 'apt::update::post-invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \ && echo 'dir::cache::pkgcache ""; dir::cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \ \ && echo 'acquire::languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \ \ && echo 'acquire::gzipindexes "true"; acquire::compressiontypes::order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes # delete apt list files since they're big , stale run rm -rf /var/lib/apt/lists/* # forces "apt-get update" in dependent images, # enable universe run sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list # upgrade packages now, since tarballs aren't updated plenty run apt-get update && apt-get dist-upgrade -y && rm -rf /var/lib/apt/lists/* # overwrite 'cmd []' in dependent dockerfile cmd ["/bin/bash"]

so, looking @ dockerfile, think major reason 14.04 larger base of operations tarball start larger. tarball 12.04 ~39mb, whereas 14.04 tarball ~66mb. download , gunzip them real sizes, think gets started on road understanding.

this can confirmed using docker history command:

$ docker history ubuntu:12.04 image created created size b45a6cbea6d1 6 days ago /bin/sh -c #(nop) cmd [/bin/bash] 0 b acc75c8f0e1d 6 days ago /bin/sh -c apt-get update && apt-get dist-upg 8.5 mb ae9570f7a92a 6 days ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 1.911 kb 4e284c9e0a9e 6 days ago /bin/sh -c rm -rf /var/lib/apt/lists/* 0 b 3327dfd9dc7d 6 days ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 156.2 kb 0b825e3a3d82 6 days ago /bin/sh -c #(nop) add together file:f66a301611d5f2b8e4 103.7 mb 511136ea3c5a 16 months ago 0 b $ docker history ubuntu:14.04 image created created size 6b4e8a7373fe 6 days ago /bin/sh -c #(nop) cmd [/bin/bash] 0 b c900195dcbf3 6 days ago /bin/sh -c apt-get update && apt-get dist-upg 2.178 mb 8b1c48305638 6 days ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 1.895 kb 25c4824a5268 6 days ago /bin/sh -c rm -rf /var/lib/apt/lists/* 0 b 67b66f26d423 6 days ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 194.5 kb b18d0a2076a1 6 days ago /bin/sh -c #(nop) add together file:57743b1a50a2440168 192.6 mb 511136ea3c5a 16 months ago 0 b

docker

No comments:

Post a Comment