11/23/2014: Is using "lsb_release -cs" a good idea inside a debian:wheezy Dockerfile?
Update from Jan 2015: The Zulu team added formal Debian support last October, I just did not know about it. Look at the version history for Zulu 8.4, 7.7, and 6.6 at http://www.azulsystems.com/zulurelnotes. Also look on DockerHub for their 8.4.x Docker files. They don't use lsb_release -cs in Debian Dockerfiles anymore, and instead allow the Zulu repository to honor 'stable' as release name. 'stable' always pushes the highest level for a Java major version. - I am paraphrasing the comments from Matthew Schuetze below.
I saw the following line in a Dockerfile
The lsb_release program is not part of the wheezy standard programs. But we can install it:
How many files were created by that install?
Over 30,000 files!
I next tried being a bit more specific with
How many files were created by that install?
I conclude that hard-coding "wheezy" is better than using lsb_release in a Dockerfile. At least when using Debian as the base operating system.
I saw the following line in a Dockerfile
RUN echo "deb http://repos.azulsystems.com/ubuntu `lsb_release -cs` main" >> /etc/apt/sources.list.d/zulu.list
The lsb_release program is not part of the wheezy standard programs. But we can install it:
$ apt-get update && apt-get install -y lsb
How many files were created by that install?
$ docker diff 09 | wc -l 30013
Over 30,000 files!
I next tried being a bit more specific with
$ apt-get update && apt-get install -y lsb-release
How many files were created by that install?
$ docker diff 23 | wc -l 1689
I conclude that hard-coding "wheezy" is better than using lsb_release in a Dockerfile. At least when using Debian as the base operating system.
11/22/2014: Using Docker to find out what apt-get update does!
While I dabble in System Administration, I don't have a deep knowledge how packages are created or maintained. Today, we'll see how to use Docker to increase my understanding of "apt-get update". I was curious about this command because I read that it's good practice to remove the files created during the update process.
I started a small container using
In another window, I found the ID of the running container using "docker ps". Let's pretend that ID starts with "45...". Look for any changed files using
You'll see nothing displayed. Now run "apt-get update" in the wheezy container. Then run the diff command again. You should see the following differences:
Inside the wheezy container we now know where to look to find file sizes:
Obviously, those .gz files might be interesting. It's easy enough to uncompress them:
And now it's possible to see what's inside:
Given the information about the text file, we can find out how many packages are available:
Now you know why it's important to run the following in your Dockerfile after using apt-get to install software.
Have fun exploring!
I started a small container using
docker run -i -t debian:wheezy /bin/bash
In another window, I found the ID of the running container using "docker ps". Let's pretend that ID starts with "45...". Look for any changed files using
docker diff "45"
You'll see nothing displayed. Now run "apt-get update" in the wheezy container. Then run the diff command again. You should see the following differences:
C /var C /var/lib C /var/lib/apt C /var/lib/apt/lists A /var/lib/apt/lists/http.debian.net_debian_dists_wheezy-updates_Release A /var/lib/apt/lists/http.debian.net_debian_dists_wheezy-updates_Release.gpg A /var/lib/apt/lists/http.debian.net_debian_dists_wheezy-updates_main_binary-amd64_Packages.gz A /var/lib/apt/lists/http.debian.net_debian_dists_wheezy_Release A /var/lib/apt/lists/http.debian.net_debian_dists_wheezy_Release.gpg A /var/lib/apt/lists/http.debian.net_debian_dists_wheezy_main_binary-amd64_Packages.gz A /var/lib/apt/lists/lock C /var/lib/apt/lists/partial A /var/lib/apt/lists/security.debian.org_dists_wheezy_updates_Release A /var/lib/apt/lists/security.debian.org_dists_wheezy_updates_Release.gpg A /var/lib/apt/lists/security.debian.org_dists_wheezy_updates_main_binary-amd64_Packages.gz
Inside the wheezy container we now know where to look to find file sizes:
# ls -lh /var/lib/apt/lists total 8.0M -rw-r--r-- 1 root root 121K Nov 23 02:49 http.debian.net_debian_dists_wheezy-updates_Release -rw-r--r-- 1 root root 836 Nov 23 02:49 http.debian.net_debian_dists_wheezy-updates_Release.gpg -rw-r--r-- 1 root root 0 Nov 23 02:37 http.debian.net_debian_dists_wheezy-updates_main_binary-amd64_Packages -rw-r--r-- 1 root root 165K Oct 18 10:33 http.debian.net_debian_dists_wheezy_Release -rw-r--r-- 1 root root 1.7K Oct 18 10:44 http.debian.net_debian_dists_wheezy_Release.gpg -rw-r--r-- 1 root root 7.3M Oct 18 10:07 http.debian.net_debian_dists_wheezy_main_binary-amd64_Packages.gz -rw-r----- 1 root root 0 Nov 23 04:09 lock drwxr-xr-x 2 root root 4.0K Nov 23 04:09 partial -rw-r--r-- 1 root root 100K Nov 20 16:31 security.debian.org_dists_wheezy_updates_Release -rw-r--r-- 1 root root 836 Nov 20 16:31 security.debian.org_dists_wheezy_updates_Release.gpg -rw-r--r-- 1 root root 270K Nov 20 16:31 security.debian.org_dists_wheezy_updates_main_binary-amd64_Packages.gz
Obviously, those .gz files might be interesting. It's easy enough to uncompress them:
gzip -d http.debian.net_debian_dists_wheezy_main_binary-amd64_Packages.gz
And now it's possible to see what's inside:
# more http.debian.net_debian_dists_wheezy_main_binary-amd64_Packages Package: 0ad Version: 0~r11863-2 Installed-Size: 8260 Maintainer: Debian Games TeamArchitecture: amd64 Depends: 0ad-data (>= 0~r11863), 0ad-data (<= 0~r11863-2), gamin | fam, libboost-signals1.49.0 (>= 1.49.0-1), libc6 (>= 2.11), libcurl3-gnutls (>= 7.16.2), libenet1a, libgamin0 | libfam0, libgcc1 (>= 1:4.1.1), libgl1-mesa-glx | libgl1, lib jpeg8 (>= 8c), libmozjs185-1.0 (>= 1.8.5-1.0.0+dfsg), libnvtt2, libopenal1, libpng12-0 (>= 1.2.13-4), libsdl1.2debian (>= 1.2.11), libstdc++6 (>= 4.6), libvorbisfile3 (>= 1.1.2), libwxbase2.8-0 (>= 2.8.12.1), libwxgtk2.8-0 (>= 2.8.12.1), l ibx11-6, libxcursor1 (>> 1.1.2), libxml2 (>= 2.7.4), zlib1g (>= 1:1.2.0) Pre-Depends: dpkg (>= 1.15.6~) Description: Real-time strategy game of ancient warfare Homepage: http://www.wildfiregames.com/0ad/ Description-md5: d943033bedada21853d2ae54a2578a7b Tag: game::strategy, implemented-in::c++, interface::x11, role::program, uitoolkit::sdl, uitoolkit::wxwidgets, use::gameplaying, x11::application Section: games Priority: optional Filename: pool/main/0/0ad/0ad_0~r11863-2_amd64.deb Size: 2260694 MD5sum: cf71a0098c502ec1933dea41610a79eb SHA1: aa4a1fdc36498f230b9e38ae0116b23be4f6249e SHA256: e28066103ecc6996e7a0285646cd2eff59288077d7cc0d22ca3489d28d215c0a ...
Given the information about the text file, we can find out how many packages are available:
# grep "Package" http.debian.net_debian_dists_wheezy_main_binary-amd64_Packages | wc -l 36237
Now you know why it's important to run the following in your Dockerfile after using apt-get to install software.
rm -rf /var/lib/apt/lists/*
Have fun exploring!