ソースを参照

Rewrite "generate-tag-details.sh" in Perl for better correctness and cooler features

Tianon Gravi 10 年 前
コミット
af8eb8dfce

+ 192 - 0
.template-helpers/generate-tag-details.pl

@@ -0,0 +1,192 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use 5.010;
+use open ':encoding(utf8)';
+
+use Mojo::UserAgent;
+
+die 'no images specified' unless @ARGV;
+
+my $ua = Mojo::UserAgent->new->max_redirects(10);
+$ua->transactor->name('Docker');
+
+sub split_image_name {
+	my $image = shift;
+	if ($image =~ m{
+		^
+		(?: ([^/:]+) / )? # optional namespace
+		([^/:]+)          # image name
+		(?: : ([^/:]+) )? # optional tag
+		$
+	}x) {
+		my ($namespace, $name, $tag) = (
+			$1 // 'library', # namespace
+			$2,              # image name
+			$3 // 'latest',  # tag
+		);
+		return ("$namespace/$name", $tag);
+	}
+	die "unrecognized image name format in: $image";
+}
+
+sub get_token {
+	my $repo = shift;
+	state %tokens;
+	return $tokens{$repo} if $tokens{$repo};
+	my $realmTx = $ua->get("https://registry-1.docker.io/v2/$repo/tags/list");
+	my $auth = $realmTx->res->headers->www_authenticate;
+	die "unexpected WWW-Authenticate header: $auth" unless $auth =~ m{ ^ Bearer \s+ (\S.*) $ }x;
+	my $realm = $1;
+	my $url = Mojo::URL->new;
+	while ($realm =~ m{
+		# key="val",
+		([^=]+)
+		=
+		"([^"]+)"
+		,?
+	}xg) {
+		my ($key, $val) = ($1, $2);
+		if ($key eq 'realm') {
+			$url->base(Mojo::URL->new($val));
+		} else {
+			$url->query->append($key => $val);
+		}
+	}
+	$url = $url->to_abs;
+	my $tokenTx = $ua->get($url);
+	die "failed to fetch token for $repo" unless $tokenTx->success;
+	return $tokens{$repo} = $tokenTx->res->json->{token};
+}
+
+sub get_manifest {
+	my ($repo, $tag) = @_;
+	my $image = "$repo:$tag";
+	state %manifests;
+	return $manifests{$image} if $manifests{$image};
+
+	my $token = get_token($repo);
+	my $authorizationHeader = { Authorization => "Bearer $token" };
+
+	my $manifestTx = $ua->get("https://registry-1.docker.io/v2/$repo/manifests/$tag" => $authorizationHeader);
+	die "failed to get manifest for $image" unless $manifestTx->success;
+	return $manifests{$image} = $manifestTx->res->json;
+}
+
+sub get_blob_headers {
+	my ($repo, $blob) = @_;
+	my $key = $repo . '@' . $blob;
+	state %headers;
+	return $headers{$key} if $headers{$key};
+
+	my $token = get_token($repo);
+	my $authorizationHeader = { Authorization => "Bearer $token" };
+
+	my $headersTx = $ua->head("https://registry-1.docker.io/v2/$repo/blobs/$blob" => $authorizationHeader);
+	die "failed to get headers for $key" unless $headersTx->success;
+	return $headers{$key} = $headersTx->res->headers;
+}
+
+sub get_layer_data {
+	my ($repo, $id, $blob, $v1) = @_;
+	$id //= $v1->{id};
+	state %layers;
+	return $layers{$id} if $layers{$id};
+	die "missing v1/blob data for layer $id" unless $blob and $v1;
+	my $data = {
+		map({ $_ => $v1->{$_} } qw(id created parent docker_version)),
+		container_command => $v1->{container_config}{Cmd},
+		virtual_size => $v1->{Size},
+		blob => $blob,
+	};
+	my $blobHeaders = get_blob_headers($repo, $blob);
+	$data->{blob_content_length} = $blobHeaders->content_length;
+	$data->{blob_last_modified} = $blobHeaders->last_modified;
+	return $layers{$id} = $data;
+}
+
+sub cmd_to_dockerfile {
+	my ($cmd) = @_;
+	if (scalar(@$cmd) == 3 && $cmd->[0] eq '/bin/sh' && $cmd->[1] eq '-c') {
+		$cmd = $cmd->[2];
+		if ($cmd =~ s{^(#[(]nop[)] )}{}) {
+			return $cmd;
+		}
+		# prefix tabs and 4-space-indents with \ and a newline (for readability), but only if we don't already have any newlines
+		$cmd =~ s/ ( (?:\t|[ ]{4})+ ) /\\\n$1/xg unless $cmd =~ m!\n!;
+		return 'RUN ' . $cmd;
+	}
+	return 'RUN ' . Mojo::JSON::encode_json($cmd);
+}
+
+my @humanSizeUnits = qw( B KB MB GB TB );
+my $humanSizeScale = 1000;
+sub human_size {
+	my ($bytes) = @_;
+	my $unit = 0;
+	my $unitBytes = $bytes;
+	while (($unitBytes = int($bytes / ($humanSizeScale ** $unit))) > $humanSizeScale) {
+		last unless $humanSizeUnits[$unit + 1];
+		++$unit;
+	}
+	return sprintf '%.1f %s', $bytes / ($humanSizeScale ** $unit), $humanSizeUnits[$unit];
+}
+
+sub size {
+	my $text = human_size(@_);
+	$text .= " ($_[0] bytes)" unless $text =~ m! \s+ B $ !x;
+	return $text;
+}
+
+sub date {
+	my $date = Mojo::Date->new(@_);
+	return $date->to_string;
+}
+
+while (my $image = shift) {
+	print "\n";
+	say '## `' . $image . '`';
+	my ($repo, $tag) = split_image_name($image);
+
+	my $manifest = get_manifest($repo, $tag);
+	my %parentChild;
+	my %totals = (
+		virtual_size => 0,
+		blob_content_length => 0,
+	);
+	for my $i (0 .. $#{ $manifest->{fsLayers} }) {
+		my $data = get_layer_data(
+			$repo, undef,
+			$manifest->{fsLayers}[$i]{blobSum},
+			Mojo::JSON::decode_json($manifest->{history}[$i]{v1Compatibility}),
+		);
+		$parentChild{$data->{parent} // ''} = $data->{id};
+		$totals{$_} += $data->{$_} for keys %totals;
+	}
+	print "\n";
+	say "-\t" . 'Total Virtual Size: ' . size($totals{virtual_size});
+	say "-\t" . 'Total v2 Content-Length: ' . size($totals{blob_content_length});
+	print "\n";
+	say '### Layers (' . scalar(keys %parentChild) . ')';
+	my $cur = $parentChild{''};
+	while ($cur) {
+		print "\n";
+		say '#### `' . $cur . '`';
+		my $data = get_layer_data($repo, $cur);
+		if ($data->{container_command}) {
+			print "\n";
+			say '```dockerfile';
+			say cmd_to_dockerfile($data->{container_command});
+			say '```';
+		}
+		print "\n";
+		say "-\t" . 'Created: ' . date($data->{created}) if $data->{created};
+		say "-\t" . 'Parent Layer: `' . $data->{parent} . '`' if $data->{parent};
+		say "-\t" . 'Docker Version: ' . $data->{docker_version} if $data->{docker_version};
+		say "-\t" . 'Virtual Size: ' . size($data->{virtual_size});
+		say "-\t" . 'v2 Blob: `' . $data->{blob} . '`';
+		say "-\t" . 'v2 Content-Length: ' . size($data->{blob_content_length});
+		say "-\t" . 'v2 Last-Modified: ' . date($data->{blob_last_modified});
+		$cur = $parentChild{$cur};
+	}
+}

+ 0 - 166
.template-helpers/generate-tag-details.sh

@@ -1,166 +0,0 @@
-#!/bin/bash
-set -eo pipefail
-
-repo="$1"
-if [ -z "$repo" ]; then
-	echo >&2 "usage: $0 repo"
-	echo >&2 "   ie: $0 hylang"
-	exit 1
-fi
-
-lines="$(curl -fsSL 'https://raw.githubusercontent.com/docker-library/official-images/master/library/'"$repo" | grep -vE '^$|^#')"
-if [ -z "$lines" ]; then
-	echo >&2 "Failed to read manifest file for $repo"
-	exit 1
-fi
-
-IFS=$'\n'
-tags=( $(echo "$lines" | awk -F ': +' '{ print $1 }') )
-unset IFS
-
-tokenUrl="$(curl -sSLD- "https://registry-1.docker.io/v2/library/$repo/tags/list" -o /dev/null | tr -d '\r' | awk -F ': +' 'tolower($1) == "www-authenticate" && gsub(/^Bearer\s+realm="/, "", $2) { sub(/",/, "?", $2); gsub(/"/, "", $2); gsub(/,/, "\\&", $2); print $2 }')"
-token="$(curl -fsSL "$tokenUrl" | tr -d '\r' | sed -r 's/^[{]|[}]$//g' | awk -v RS=',' -F '"' '$2 == "token" { print $4 }')"
-authHeader="Authorization: Bearer $token"
-
-get_digest() {
-	local tag="$1"
-	curl -sSLD- "https://registry-1.docker.io/v2/library/$repo/manifests/$tag" --header "$authHeader" -o /dev/null | tr -d '\r' | awk -F ': +' 'tolower($1) == "docker-content-digest" { print $2 }'
-}
-
-get_manifest() {
-	local tag="$1"
-	curl -sSL "https://registry-1.docker.io/v2/library/$repo/manifests/$tag" --header "$authHeader" | tr -d '\r'
-}
-
-get_blob_headers() {
-	local blob="$1"
-	curl -sSL "https://registry-1.docker.io/v2/library/$repo/blobs/$blob" --header "$authHeader" --head | tr -d '\r'
-}
-
-json_get_data() {
-	local json="$1"; shift
-	local data="$1"; shift
-	local strip="$1"; shift || strip='^"|"$'
-	echo "$json" | awk -F '\t' '$1 ~ /^'"$data"'$/ { gsub(/'"$strip"'/, "", $2); print $2 }'
-}
-
-humanSizeUnits=( B KB MB GB TB )
-humanSizeScale=1
-human_size() {
-	local bytes="$1"
-	local unit=0
-	local unitBytes="$1"
-	while unitBytes="$(echo "scale=0; $bytes / (1000 ^ $unit)" | bc -l)" && [ "$unitBytes" -gt 1000 ]; do
-		if [ ! "${humanSizeUnits[$(( unit + 1 ))]}" ]; then
-			break
-		fi
-		unit="$(( unit + 1 ))"
-	done
-	echo "$(echo "scale=$humanSizeScale; $bytes / (1000 ^ $unit)" | bc -l) ${humanSizeUnits[$unit]}"
-}
-
-size() {
-	text="$(human_size "$1")"
-	if [[ "$text" != *' B' ]]; then
-		text+=" ($1 bytes)"
-	fi
-	echo "$text"
-}
-
-pdate() {
-	TZ=America/Los_Angeles date --date="$1" --rfc-2822
-}
-
-jsonSh="$(curl -fsSL 'https://raw.githubusercontent.com/dominictarr/JSON.sh/ed3f9dd285ebd4183934adb54ea5a2fda6b25a98/JSON.sh')"
-
-echo "# Tags of \`$repo\`"
-
-# add a simple ToC
-echo
-for tag in "${tags[@]}"; do
-	# GitHub heading anchors are strange
-	href="${repo}:${tag}"
-	href="${href//./}"
-	href="${href//:/}"
-	href="${href,,}"
-	echo "- [\`$repo:$tag\`](#${href})"
-done
-
-declare -A layerData=()
-
-for tag in "${tags[@]}"; do
-	echo
-	echo "## \`$repo:$tag\`"
-	digest="$(get_digest "$tag")"
-	if [ "$digest" ]; then
-		echo
-		echo '```console'
-		echo "$ docker pull $repo@$digest"
-		echo '```'
-	fi
-	manifest="$(get_manifest "$tag")"
-	if [ "$manifest" ]; then
-		parsedManifest="$(echo "$manifest" | bash <(echo "$jsonSh") -l)"
-		eval "declare -A layerBlobs=( $(echo "$parsedManifest" | awk -F '\t' 'gsub(/^\["fsLayers",/, "", $1) && gsub(/,"blobSum"\]$/, "", $1) { print "[" $1 "]=" $2 }') )"
-		eval "declare -A layerV1s=( $(echo "$parsedManifest" | awk -F '\t' 'gsub(/^\["history",/, "", $1) && gsub(/,"v1Compatibility"\]$/, "", $1) { print "[" $1 "]=" $2 }') )"
-		declare -A parentChild=()
-		declare -A totals=(
-			[Size]=0
-			[content-length]=0
-		)
-		for i in "${!layerV1s[@]}"; do
-			layerV1="${layerV1s[$i]%'\n'}" # lol \n
-			parsedLayerV1="$(echo "$layerV1" | bash <(echo "$jsonSh"))"
-			layerId="$(json_get_data "$parsedLayerV1" '\["id"\]')"
-			if [ -z "${layerData[$layerId]}" ]; then
-				layerData["$layerId"]=1
-				for field in created parent docker_version Size; do
-					layerData["${layerId}_${field}"]="$(json_get_data "$parsedLayerV1" '\["'"$field"'"\]')"
-				done
-				layerData["${layerId}_container_cmd"]="$(json_get_data "$parsedLayerV1" '\["container_config","Cmd"\]' '')"
-				layerData["${layerId}_blob"]="${layerBlobs[$i]}"
-				blobHeaders="$(get_blob_headers "${layerData["${layerId}_blob"]}")"
-				for header in content-length last-modified; do
-					layerData["${layerId}_${header}"]="$(echo "$blobHeaders" | awk -F ': +' 'tolower($1) == "'"$header"'" { print $2 }')"
-				done
-			fi
-			parentChild["${layerData[${layerId}_parent]:-none}"]="$layerId"
-			for field in Size content-length; do
-				totals["$field"]="$(echo "${totals[$field]} + ${layerData[${layerId}_${field}]}" | bc)"
-			done
-		done
-		echo
-		echo "- Total Virtual Size: $(size "${totals[Size]}")"
-		echo "- Total v2 Content-Length: $(size "${totals[content-length]}"); compressed"
-		if [ "${#parentChild[@]}" -gt 0 ]; then
-			echo
-			echo "### Layers (${#parentChild[@]})"
-			cur="${parentChild[none]}"
-			while [ "$cur" ]; do
-				echo
-				echo "#### \`$cur\`"
-				cmd="${layerData[${cur}_container_cmd]}"
-				if [ "$cmd" ]; then
-					cmd="${cmd//'\u0026'/'&'}"
-					cmd="${cmd//'\u003c'/'<'}"
-					cmd="${cmd//'\u003e'/'>'}"
-					echo
-					echo '```json'
-					echo "$cmd"
-					echo '```'
-				fi
-				echo
-				echo "- Created: $(pdate "${layerData[${cur}_created]}")"
-				if [ "${layerData[${cur}_parent]}" ]; then
-					echo "- Parent Layer: \`${layerData[${cur}_parent]}\`"
-				fi
-				echo "- Docker Version: ${layerData[${cur}_docker_version]}"
-				echo "- Virtual Size: $(size "${layerData[${cur}_Size]}")"
-				echo "- v2 Blob: \`${layerData[${cur}_blob]}\`"
-				echo "- v2 Content-Length: $(size "${layerData[${cur}_content-length]}"); compressed"
-				echo "- v2 Last-Modified: $(pdate "${layerData[${cur}_last-modified]}")"
-				cur="${parentChild[$cur]}"
-			done
-		fi
-	fi
-done

+ 39 - 0
hello-world/tag-details.md

@@ -0,0 +1,39 @@
+<!-- THIS FILE IS GENERATED VIA '.template-helpers/generate-tag-details.pl' -->
+
+# Tags of `hello-world`
+
+-	[`hello-world:latest`](#hello-worldlatest)
+
+## `hello-world:latest`
+
+-	Total Virtual Size: 960.0 B
+-	Total v2 Content-Length: 633.0 B
+
+### Layers (2)
+
+#### `535020c3e8add9d6bb06e5ac15a261e73d9b213d62fb2c14d752b8e189b2b912`
+
+```dockerfile
+COPY file:4abd3bff60458ca3b079d7b131ce26b2719055a030dfa96ff827da2b7c7038a7 in /
+```
+
+-	Created: Thu, 06 Aug 2015 23:53:22 GMT
+-	Docker Version: 1.7.1
+-	Virtual Size: 960.0 B
+-	v2 Blob: `sha256:03f4658f8b782e12230c1783426bd3bacce651ce582a4ffb6fbbfa2079428ecb`
+-	v2 Content-Length: 601.0 B
+-	v2 Last-Modified: Fri, 07 Aug 2015 00:38:43 GMT
+
+#### `af340544ed62de0680f441c71fa1a80cb084678fed42bae393e543faea3a572c`
+
+```dockerfile
+CMD ["/hello"]
+```
+
+-	Created: Thu, 06 Aug 2015 23:53:22 GMT
+-	Parent Layer: `535020c3e8add9d6bb06e5ac15a261e73d9b213d62fb2c14d752b8e189b2b912`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT

+ 1248 - 0
hylang/tag-details.md

@@ -0,0 +1,1248 @@
+<!-- THIS FILE IS GENERATED VIA '.template-helpers/generate-tag-details.pl' -->
+
+# Tags of `hylang`
+
+-	[`hylang:latest`](#hylanglatest)
+-	[`hylang:0`](#hylang0)
+-	[`hylang:0.11`](#hylang011)
+-	[`hylang:0.11.0`](#hylang0110)
+
+## `hylang:latest`
+
+-	Total Virtual Size: 690.9 MB (690887026 bytes)
+-	Total v2 Content-Length: 265.2 MB (265166664 bytes)
+
+### Layers (17)
+
+#### `2c49f83e0b13f73bf3d276c9fe26ba9aa94d2a1614e866642b95cb0245d0cdab`
+
+```dockerfile
+ADD file:b770303e11edaa0ad0d8f43f6db4fa26673923912b5d5f7cb748ba025e6c4d3b in /
+```
+
+-	Created: Thu, 20 Aug 2015 20:17:59 GMT
+-	Docker Version: 1.7.1
+-	Virtual Size: 125.2 MB (125174904 bytes)
+-	v2 Blob: `sha256:7ccc78f8af6db23a5013f7b90b5672b82d69dd2fb30d1e6736dba29209aceee7`
+-	v2 Content-Length: 51.4 MB (51368377 bytes)
+-	v2 Last-Modified: Thu, 20 Aug 2015 20:40:09 GMT
+
+#### `4a5e6db8c0693a16de88b7559ded7c1cb804018571b137e13abb1713ce6a71cf`
+
+```dockerfile
+CMD ["/bin/bash"]
+```
+
+-	Created: Thu, 20 Aug 2015 20:18:01 GMT
+-	Parent Layer: `2c49f83e0b13f73bf3d276c9fe26ba9aa94d2a1614e866642b95cb0245d0cdab`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `f972ade4c9d5f9863b782ee685c8ec80da9bdb8e43834919214dd68d501687f0`
+
+```dockerfile
+RUN apt-get update && apt-get install -y --no-install-recommends \
+		ca-certificates \
+		curl \
+		wget \
+	&& rm -rf /var/lib/apt/lists/*
+```
+
+-	Created: Thu, 20 Aug 2015 20:24:45 GMT
+-	Parent Layer: `4a5e6db8c0693a16de88b7559ded7c1cb804018571b137e13abb1713ce6a71cf`
+-	Docker Version: 1.7.1
+-	Virtual Size: 44.4 MB (44355942 bytes)
+-	v2 Blob: `sha256:29f19d8b362b32c34e142a0959111d215d43805f3d4242bde1359770a5d69284`
+-	v2 Content-Length: 18.5 MB (18538913 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 22:15:11 GMT
+
+#### `a0b6d62d8b494ada2b9a303ccf398021b2ca2838234f8d5f735743be77ab2726`
+
+```dockerfile
+RUN apt-get update && apt-get install -y --no-install-recommends \
+		bzr \
+		git \
+		mercurial \
+		openssh-client \
+		subversion \
+	&& rm -rf /var/lib/apt/lists/*
+```
+
+-	Created: Thu, 20 Aug 2015 20:25:45 GMT
+-	Parent Layer: `f972ade4c9d5f9863b782ee685c8ec80da9bdb8e43834919214dd68d501687f0`
+-	Docker Version: 1.7.1
+-	Virtual Size: 122.3 MB (122318537 bytes)
+-	v2 Blob: `sha256:a068cb6fd68bb10bf1f97beedee2837c2b2a52109dbbb59ea25462d661006e0d`
+-	v2 Content-Length: 42.3 MB (42340018 bytes)
+-	v2 Last-Modified: Thu, 20 Aug 2015 20:59:13 GMT
+
+#### `8f45ce3be01ef6cf47621675c4a75cfdb5b951fb495b9c72394038ac2097c975`
+
+```dockerfile
+RUN apt-get update && apt-get install -y --no-install-recommends \
+		autoconf \
+		automake \
+		bzip2 \
+		file \
+		g++ \
+		gcc \
+		imagemagick \
+		libbz2-dev \
+		libc6-dev \
+		libcurl4-openssl-dev \
+		libevent-dev \
+		libffi-dev \
+		libglib2.0-dev \
+		libjpeg-dev \
+		liblzma-dev \
+		libmagickcore-dev \
+		libmagickwand-dev \
+		libmysqlclient-dev \
+		libncurses-dev \
+		libpng-dev \
+		libpq-dev \
+		libreadline-dev \
+		libsqlite3-dev \
+		libssl-dev \
+		libtool \
+		libwebp-dev \
+		libxml2-dev \
+		libxslt-dev \
+		libyaml-dev \
+		make \
+		patch \
+		xz-utils \
+		zlib1g-dev \
+	&& rm -rf /var/lib/apt/lists/*
+```
+
+-	Created: Mon, 24 Aug 2015 16:11:35 GMT
+-	Parent Layer: `a0b6d62d8b494ada2b9a303ccf398021b2ca2838234f8d5f735743be77ab2726`
+-	Docker Version: 1.7.1
+-	Virtual Size: 313.7 MB (313666691 bytes)
+-	v2 Blob: `sha256:2ac01aa9d22a0c73405fe147734a6acf8929209620ca4a80fe8064449ab7d301`
+-	v2 Content-Length: 128.2 MB (128191020 bytes)
+-	v2 Last-Modified: Mon, 24 Aug 2015 16:55:37 GMT
+
+#### `1083021b835b0dadec581bfe5df60f68badcac3505882022874961469b57a86c`
+
+```dockerfile
+RUN apt-get purge -y python.*
+```
+
+-	Created: Mon, 24 Aug 2015 23:01:52 GMT
+-	Parent Layer: `8f45ce3be01ef6cf47621675c4a75cfdb5b951fb495b9c72394038ac2097c975`
+-	Docker Version: 1.7.1
+-	Virtual Size: 968.6 KB (968646 bytes)
+-	v2 Blob: `sha256:d52aa7328be73990218ff7667d78082a9a133bcb6a0147d012619ef419e61dea`
+-	v2 Content-Length: 219.3 KB (219345 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 02:17:33 GMT
+
+#### `daf97737baa6dfb8c2a9aa0b1b29382ffa0f4e83963cd0d343f35880a85e819e`
+
+```dockerfile
+ENV LANG=C.UTF-8
+```
+
+-	Created: Mon, 24 Aug 2015 23:01:53 GMT
+-	Parent Layer: `1083021b835b0dadec581bfe5df60f68badcac3505882022874961469b57a86c`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `d0db56467d6fa4177e047eccff20620dcbc1b078cc116b034844cc5d71f2ef3d`
+
+```dockerfile
+RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 97FC712E4C024BBEA48A61ED3A5CA953F73C700D
+```
+
+-	Created: Tue, 25 Aug 2015 00:08:45 GMT
+-	Parent Layer: `daf97737baa6dfb8c2a9aa0b1b29382ffa0f4e83963cd0d343f35880a85e819e`
+-	Docker Version: 1.7.1
+-	Virtual Size: 12.6 KB (12606 bytes)
+-	v2 Blob: `sha256:0eff4dba2813619cde95312133f5a9d313114d427afceba2fa42d43855c82274`
+-	v2 Content-Length: 6.7 KB (6739 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 03:02:44 GMT
+
+#### `3d972d281ba642548b4d823ed9a7f682b7a948f198ebe63a0b4d15a72b56f5b3`
+
+```dockerfile
+ENV PYTHON_VERSION=3.4.3
+```
+
+-	Created: Tue, 25 Aug 2015 00:08:46 GMT
+-	Parent Layer: `d0db56467d6fa4177e047eccff20620dcbc1b078cc116b034844cc5d71f2ef3d`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `11c3332417eaef0f1f72fa0a8b4c91fadbcaef6986f9d4ea29351ddfc8565867`
+
+```dockerfile
+ENV PYTHON_PIP_VERSION=7.1.2
+```
+
+-	Created: Tue, 25 Aug 2015 00:08:46 GMT
+-	Parent Layer: `3d972d281ba642548b4d823ed9a7f682b7a948f198ebe63a0b4d15a72b56f5b3`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `57b905b0cff8c61e420002921bc22a8a2022b6d6fc70ad2a995e39859399d778`
+
+```dockerfile
+RUN set -x \
+	&& mkdir -p /usr/src/python \
+	&& curl -SL "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz" -o python.tar.xz \
+	&& curl -SL "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz.asc" -o python.tar.xz.asc \
+	&& gpg --verify python.tar.xz.asc \
+	&& tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \
+	&& rm python.tar.xz* \
+	&& cd /usr/src/python \
+	&& ./configure --enable-shared --enable-unicode=ucs4 \
+	&& make -j$(nproc) \
+	&& make install \
+	&& ldconfig \
+	&& pip3 install --no-cache-dir --upgrade pip==$PYTHON_PIP_VERSION \
+	&& find /usr/local \
+		\( -type d -a -name test -o -name tests \) \
+		-o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
+		-exec rm -rf '{}' + \
+	&& rm -rf /usr/src/python
+```
+
+-	Created: Tue, 25 Aug 2015 00:12:02 GMT
+-	Parent Layer: `11c3332417eaef0f1f72fa0a8b4c91fadbcaef6986f9d4ea29351ddfc8565867`
+-	Docker Version: 1.7.1
+-	Virtual Size: 78.3 MB (78277634 bytes)
+-	v2 Blob: `sha256:8342e2e9b0e9b25d841853678ffdb88a1ed6d98e06410300b72a6c72d13f3b7e`
+-	v2 Content-Length: 22.1 MB (22061417 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 03:02:37 GMT
+
+#### `8ca1a8623b9648c90fbdcf7c1cb48b7096ecb5615e31915f0d7c633d45130f22`
+
+```dockerfile
+RUN cd /usr/local/bin \
+	&& ln -s easy_install-3.4 easy_install \
+	&& ln -s idle3 idle \
+	&& ln -s pydoc3 pydoc \
+	&& ln -s python3 python \
+	&& ln -s python-config3 python-config
+```
+
+-	Created: Tue, 25 Aug 2015 00:12:05 GMT
+-	Parent Layer: `57b905b0cff8c61e420002921bc22a8a2022b6d6fc70ad2a995e39859399d778`
+-	Docker Version: 1.7.1
+-	Virtual Size: 48.0 B
+-	v2 Blob: `sha256:aee2bb808b2392b0743842df644cb03594b3a34bf3020025c796e823814768f5`
+-	v2 Content-Length: 272.0 B
+-	v2 Last-Modified: Tue, 25 Aug 2015 03:02:16 GMT
+
+#### `615ff4d35e321826d4fc0e7fcd67c5e1175f3db3b81ed222e53074161bc5ced0`
+
+```dockerfile
+CMD ["python3"]
+```
+
+-	Created: Tue, 25 Aug 2015 00:12:06 GMT
+-	Parent Layer: `8ca1a8623b9648c90fbdcf7c1cb48b7096ecb5615e31915f0d7c633d45130f22`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `957c00090d1aa9548a6cada8437dad11f2c446c166d0b15f82cf29a60255b022`
+
+```dockerfile
+MAINTAINER Paul R. Tagliamonte <[email protected]>
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:10 GMT
+-	Parent Layer: `615ff4d35e321826d4fc0e7fcd67c5e1175f3db3b81ed222e53074161bc5ced0`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `bf030dfcd019c70fc8b6472baabaffdad0396b52809c2297df4789c522e27540`
+
+```dockerfile
+ADD dir:954f76c7f237c7e873eb4ea2eb4ca712396e2ddb2b6a9b4f7f369aaf4831ab0e in /opt/hylang/hy
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:11 GMT
+-	Parent Layer: `957c00090d1aa9548a6cada8437dad11f2c446c166d0b15f82cf29a60255b022`
+-	Docker Version: 1.7.1
+-	Virtual Size: 748.7 KB (748714 bytes)
+-	v2 Blob: `sha256:882920b8f584d6489fd0bc3d8fd447da239267f68a9ad3358675a36db2296785`
+-	v2 Content-Length: 359.2 KB (359203 bytes)
+-	v2 Last-Modified: Wed, 26 Aug 2015 22:39:41 GMT
+
+#### `52da90e29440eb025e2258836b786281486cef006ff034ba91c4b41ef429d433`
+
+```dockerfile
+RUN pip3 install -e /opt/hylang/hy
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:16 GMT
+-	Parent Layer: `bf030dfcd019c70fc8b6472baabaffdad0396b52809c2297df4789c522e27540`
+-	Docker Version: 1.7.1
+-	Virtual Size: 5.4 MB (5363304 bytes)
+-	v2 Blob: `sha256:4633c7bd1cb4a412ffc78eaa9295fc8815e366a952e6c1219a2dc39aaaf02586`
+-	v2 Content-Length: 2.1 MB (2081136 bytes)
+-	v2 Last-Modified: Wed, 26 Aug 2015 22:39:38 GMT
+
+#### `599d9e646932f023dca41418741578db90eb98462a044e81348b2373ca184c29`
+
+```dockerfile
+CMD ["hy"]
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:16 GMT
+-	Parent Layer: `52da90e29440eb025e2258836b786281486cef006ff034ba91c4b41ef429d433`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+## `hylang:0`
+
+-	Total Virtual Size: 690.9 MB (690887026 bytes)
+-	Total v2 Content-Length: 265.2 MB (265166696 bytes)
+
+### Layers (17)
+
+#### `2c49f83e0b13f73bf3d276c9fe26ba9aa94d2a1614e866642b95cb0245d0cdab`
+
+```dockerfile
+ADD file:b770303e11edaa0ad0d8f43f6db4fa26673923912b5d5f7cb748ba025e6c4d3b in /
+```
+
+-	Created: Thu, 20 Aug 2015 20:17:59 GMT
+-	Docker Version: 1.7.1
+-	Virtual Size: 125.2 MB (125174904 bytes)
+-	v2 Blob: `sha256:7ccc78f8af6db23a5013f7b90b5672b82d69dd2fb30d1e6736dba29209aceee7`
+-	v2 Content-Length: 51.4 MB (51368377 bytes)
+-	v2 Last-Modified: Thu, 20 Aug 2015 20:40:09 GMT
+
+#### `4a5e6db8c0693a16de88b7559ded7c1cb804018571b137e13abb1713ce6a71cf`
+
+```dockerfile
+CMD ["/bin/bash"]
+```
+
+-	Created: Thu, 20 Aug 2015 20:18:01 GMT
+-	Parent Layer: `2c49f83e0b13f73bf3d276c9fe26ba9aa94d2a1614e866642b95cb0245d0cdab`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `f972ade4c9d5f9863b782ee685c8ec80da9bdb8e43834919214dd68d501687f0`
+
+```dockerfile
+RUN apt-get update && apt-get install -y --no-install-recommends \
+		ca-certificates \
+		curl \
+		wget \
+	&& rm -rf /var/lib/apt/lists/*
+```
+
+-	Created: Thu, 20 Aug 2015 20:24:45 GMT
+-	Parent Layer: `4a5e6db8c0693a16de88b7559ded7c1cb804018571b137e13abb1713ce6a71cf`
+-	Docker Version: 1.7.1
+-	Virtual Size: 44.4 MB (44355942 bytes)
+-	v2 Blob: `sha256:29f19d8b362b32c34e142a0959111d215d43805f3d4242bde1359770a5d69284`
+-	v2 Content-Length: 18.5 MB (18538913 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 22:15:11 GMT
+
+#### `a0b6d62d8b494ada2b9a303ccf398021b2ca2838234f8d5f735743be77ab2726`
+
+```dockerfile
+RUN apt-get update && apt-get install -y --no-install-recommends \
+		bzr \
+		git \
+		mercurial \
+		openssh-client \
+		subversion \
+	&& rm -rf /var/lib/apt/lists/*
+```
+
+-	Created: Thu, 20 Aug 2015 20:25:45 GMT
+-	Parent Layer: `f972ade4c9d5f9863b782ee685c8ec80da9bdb8e43834919214dd68d501687f0`
+-	Docker Version: 1.7.1
+-	Virtual Size: 122.3 MB (122318537 bytes)
+-	v2 Blob: `sha256:a068cb6fd68bb10bf1f97beedee2837c2b2a52109dbbb59ea25462d661006e0d`
+-	v2 Content-Length: 42.3 MB (42340018 bytes)
+-	v2 Last-Modified: Thu, 20 Aug 2015 20:59:13 GMT
+
+#### `8f45ce3be01ef6cf47621675c4a75cfdb5b951fb495b9c72394038ac2097c975`
+
+```dockerfile
+RUN apt-get update && apt-get install -y --no-install-recommends \
+		autoconf \
+		automake \
+		bzip2 \
+		file \
+		g++ \
+		gcc \
+		imagemagick \
+		libbz2-dev \
+		libc6-dev \
+		libcurl4-openssl-dev \
+		libevent-dev \
+		libffi-dev \
+		libglib2.0-dev \
+		libjpeg-dev \
+		liblzma-dev \
+		libmagickcore-dev \
+		libmagickwand-dev \
+		libmysqlclient-dev \
+		libncurses-dev \
+		libpng-dev \
+		libpq-dev \
+		libreadline-dev \
+		libsqlite3-dev \
+		libssl-dev \
+		libtool \
+		libwebp-dev \
+		libxml2-dev \
+		libxslt-dev \
+		libyaml-dev \
+		make \
+		patch \
+		xz-utils \
+		zlib1g-dev \
+	&& rm -rf /var/lib/apt/lists/*
+```
+
+-	Created: Mon, 24 Aug 2015 16:11:35 GMT
+-	Parent Layer: `a0b6d62d8b494ada2b9a303ccf398021b2ca2838234f8d5f735743be77ab2726`
+-	Docker Version: 1.7.1
+-	Virtual Size: 313.7 MB (313666691 bytes)
+-	v2 Blob: `sha256:2ac01aa9d22a0c73405fe147734a6acf8929209620ca4a80fe8064449ab7d301`
+-	v2 Content-Length: 128.2 MB (128191020 bytes)
+-	v2 Last-Modified: Mon, 24 Aug 2015 16:55:37 GMT
+
+#### `1083021b835b0dadec581bfe5df60f68badcac3505882022874961469b57a86c`
+
+```dockerfile
+RUN apt-get purge -y python.*
+```
+
+-	Created: Mon, 24 Aug 2015 23:01:52 GMT
+-	Parent Layer: `8f45ce3be01ef6cf47621675c4a75cfdb5b951fb495b9c72394038ac2097c975`
+-	Docker Version: 1.7.1
+-	Virtual Size: 968.6 KB (968646 bytes)
+-	v2 Blob: `sha256:d52aa7328be73990218ff7667d78082a9a133bcb6a0147d012619ef419e61dea`
+-	v2 Content-Length: 219.3 KB (219345 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 02:17:33 GMT
+
+#### `daf97737baa6dfb8c2a9aa0b1b29382ffa0f4e83963cd0d343f35880a85e819e`
+
+```dockerfile
+ENV LANG=C.UTF-8
+```
+
+-	Created: Mon, 24 Aug 2015 23:01:53 GMT
+-	Parent Layer: `1083021b835b0dadec581bfe5df60f68badcac3505882022874961469b57a86c`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `d0db56467d6fa4177e047eccff20620dcbc1b078cc116b034844cc5d71f2ef3d`
+
+```dockerfile
+RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 97FC712E4C024BBEA48A61ED3A5CA953F73C700D
+```
+
+-	Created: Tue, 25 Aug 2015 00:08:45 GMT
+-	Parent Layer: `daf97737baa6dfb8c2a9aa0b1b29382ffa0f4e83963cd0d343f35880a85e819e`
+-	Docker Version: 1.7.1
+-	Virtual Size: 12.6 KB (12606 bytes)
+-	v2 Blob: `sha256:0eff4dba2813619cde95312133f5a9d313114d427afceba2fa42d43855c82274`
+-	v2 Content-Length: 6.7 KB (6739 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 03:02:44 GMT
+
+#### `3d972d281ba642548b4d823ed9a7f682b7a948f198ebe63a0b4d15a72b56f5b3`
+
+```dockerfile
+ENV PYTHON_VERSION=3.4.3
+```
+
+-	Created: Tue, 25 Aug 2015 00:08:46 GMT
+-	Parent Layer: `d0db56467d6fa4177e047eccff20620dcbc1b078cc116b034844cc5d71f2ef3d`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `11c3332417eaef0f1f72fa0a8b4c91fadbcaef6986f9d4ea29351ddfc8565867`
+
+```dockerfile
+ENV PYTHON_PIP_VERSION=7.1.2
+```
+
+-	Created: Tue, 25 Aug 2015 00:08:46 GMT
+-	Parent Layer: `3d972d281ba642548b4d823ed9a7f682b7a948f198ebe63a0b4d15a72b56f5b3`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `57b905b0cff8c61e420002921bc22a8a2022b6d6fc70ad2a995e39859399d778`
+
+```dockerfile
+RUN set -x \
+	&& mkdir -p /usr/src/python \
+	&& curl -SL "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz" -o python.tar.xz \
+	&& curl -SL "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz.asc" -o python.tar.xz.asc \
+	&& gpg --verify python.tar.xz.asc \
+	&& tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \
+	&& rm python.tar.xz* \
+	&& cd /usr/src/python \
+	&& ./configure --enable-shared --enable-unicode=ucs4 \
+	&& make -j$(nproc) \
+	&& make install \
+	&& ldconfig \
+	&& pip3 install --no-cache-dir --upgrade pip==$PYTHON_PIP_VERSION \
+	&& find /usr/local \
+		\( -type d -a -name test -o -name tests \) \
+		-o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
+		-exec rm -rf '{}' + \
+	&& rm -rf /usr/src/python
+```
+
+-	Created: Tue, 25 Aug 2015 00:12:02 GMT
+-	Parent Layer: `11c3332417eaef0f1f72fa0a8b4c91fadbcaef6986f9d4ea29351ddfc8565867`
+-	Docker Version: 1.7.1
+-	Virtual Size: 78.3 MB (78277634 bytes)
+-	v2 Blob: `sha256:8342e2e9b0e9b25d841853678ffdb88a1ed6d98e06410300b72a6c72d13f3b7e`
+-	v2 Content-Length: 22.1 MB (22061417 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 03:02:37 GMT
+
+#### `8ca1a8623b9648c90fbdcf7c1cb48b7096ecb5615e31915f0d7c633d45130f22`
+
+```dockerfile
+RUN cd /usr/local/bin \
+	&& ln -s easy_install-3.4 easy_install \
+	&& ln -s idle3 idle \
+	&& ln -s pydoc3 pydoc \
+	&& ln -s python3 python \
+	&& ln -s python-config3 python-config
+```
+
+-	Created: Tue, 25 Aug 2015 00:12:05 GMT
+-	Parent Layer: `57b905b0cff8c61e420002921bc22a8a2022b6d6fc70ad2a995e39859399d778`
+-	Docker Version: 1.7.1
+-	Virtual Size: 48.0 B
+-	v2 Blob: `sha256:aee2bb808b2392b0743842df644cb03594b3a34bf3020025c796e823814768f5`
+-	v2 Content-Length: 272.0 B
+-	v2 Last-Modified: Tue, 25 Aug 2015 03:02:16 GMT
+
+#### `615ff4d35e321826d4fc0e7fcd67c5e1175f3db3b81ed222e53074161bc5ced0`
+
+```dockerfile
+CMD ["python3"]
+```
+
+-	Created: Tue, 25 Aug 2015 00:12:06 GMT
+-	Parent Layer: `8ca1a8623b9648c90fbdcf7c1cb48b7096ecb5615e31915f0d7c633d45130f22`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `957c00090d1aa9548a6cada8437dad11f2c446c166d0b15f82cf29a60255b022`
+
+```dockerfile
+MAINTAINER Paul R. Tagliamonte <[email protected]>
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:10 GMT
+-	Parent Layer: `615ff4d35e321826d4fc0e7fcd67c5e1175f3db3b81ed222e53074161bc5ced0`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `bf030dfcd019c70fc8b6472baabaffdad0396b52809c2297df4789c522e27540`
+
+```dockerfile
+ADD dir:954f76c7f237c7e873eb4ea2eb4ca712396e2ddb2b6a9b4f7f369aaf4831ab0e in /opt/hylang/hy
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:11 GMT
+-	Parent Layer: `957c00090d1aa9548a6cada8437dad11f2c446c166d0b15f82cf29a60255b022`
+-	Docker Version: 1.7.1
+-	Virtual Size: 748.7 KB (748714 bytes)
+-	v2 Blob: `sha256:882920b8f584d6489fd0bc3d8fd447da239267f68a9ad3358675a36db2296785`
+-	v2 Content-Length: 359.2 KB (359203 bytes)
+-	v2 Last-Modified: Wed, 26 Aug 2015 22:39:41 GMT
+
+#### `52da90e29440eb025e2258836b786281486cef006ff034ba91c4b41ef429d433`
+
+```dockerfile
+RUN pip3 install -e /opt/hylang/hy
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:16 GMT
+-	Parent Layer: `bf030dfcd019c70fc8b6472baabaffdad0396b52809c2297df4789c522e27540`
+-	Docker Version: 1.7.1
+-	Virtual Size: 5.4 MB (5363304 bytes)
+-	v2 Blob: `sha256:4633c7bd1cb4a412ffc78eaa9295fc8815e366a952e6c1219a2dc39aaaf02586`
+-	v2 Content-Length: 2.1 MB (2081136 bytes)
+-	v2 Last-Modified: Wed, 26 Aug 2015 22:39:38 GMT
+
+#### `599d9e646932f023dca41418741578db90eb98462a044e81348b2373ca184c29`
+
+```dockerfile
+CMD ["hy"]
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:16 GMT
+-	Parent Layer: `52da90e29440eb025e2258836b786281486cef006ff034ba91c4b41ef429d433`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+## `hylang:0.11`
+
+-	Total Virtual Size: 690.9 MB (690887026 bytes)
+-	Total v2 Content-Length: 265.2 MB (265166696 bytes)
+
+### Layers (17)
+
+#### `2c49f83e0b13f73bf3d276c9fe26ba9aa94d2a1614e866642b95cb0245d0cdab`
+
+```dockerfile
+ADD file:b770303e11edaa0ad0d8f43f6db4fa26673923912b5d5f7cb748ba025e6c4d3b in /
+```
+
+-	Created: Thu, 20 Aug 2015 20:17:59 GMT
+-	Docker Version: 1.7.1
+-	Virtual Size: 125.2 MB (125174904 bytes)
+-	v2 Blob: `sha256:7ccc78f8af6db23a5013f7b90b5672b82d69dd2fb30d1e6736dba29209aceee7`
+-	v2 Content-Length: 51.4 MB (51368377 bytes)
+-	v2 Last-Modified: Thu, 20 Aug 2015 20:40:09 GMT
+
+#### `4a5e6db8c0693a16de88b7559ded7c1cb804018571b137e13abb1713ce6a71cf`
+
+```dockerfile
+CMD ["/bin/bash"]
+```
+
+-	Created: Thu, 20 Aug 2015 20:18:01 GMT
+-	Parent Layer: `2c49f83e0b13f73bf3d276c9fe26ba9aa94d2a1614e866642b95cb0245d0cdab`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `f972ade4c9d5f9863b782ee685c8ec80da9bdb8e43834919214dd68d501687f0`
+
+```dockerfile
+RUN apt-get update && apt-get install -y --no-install-recommends \
+		ca-certificates \
+		curl \
+		wget \
+	&& rm -rf /var/lib/apt/lists/*
+```
+
+-	Created: Thu, 20 Aug 2015 20:24:45 GMT
+-	Parent Layer: `4a5e6db8c0693a16de88b7559ded7c1cb804018571b137e13abb1713ce6a71cf`
+-	Docker Version: 1.7.1
+-	Virtual Size: 44.4 MB (44355942 bytes)
+-	v2 Blob: `sha256:29f19d8b362b32c34e142a0959111d215d43805f3d4242bde1359770a5d69284`
+-	v2 Content-Length: 18.5 MB (18538913 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 22:15:11 GMT
+
+#### `a0b6d62d8b494ada2b9a303ccf398021b2ca2838234f8d5f735743be77ab2726`
+
+```dockerfile
+RUN apt-get update && apt-get install -y --no-install-recommends \
+		bzr \
+		git \
+		mercurial \
+		openssh-client \
+		subversion \
+	&& rm -rf /var/lib/apt/lists/*
+```
+
+-	Created: Thu, 20 Aug 2015 20:25:45 GMT
+-	Parent Layer: `f972ade4c9d5f9863b782ee685c8ec80da9bdb8e43834919214dd68d501687f0`
+-	Docker Version: 1.7.1
+-	Virtual Size: 122.3 MB (122318537 bytes)
+-	v2 Blob: `sha256:a068cb6fd68bb10bf1f97beedee2837c2b2a52109dbbb59ea25462d661006e0d`
+-	v2 Content-Length: 42.3 MB (42340018 bytes)
+-	v2 Last-Modified: Thu, 20 Aug 2015 20:59:13 GMT
+
+#### `8f45ce3be01ef6cf47621675c4a75cfdb5b951fb495b9c72394038ac2097c975`
+
+```dockerfile
+RUN apt-get update && apt-get install -y --no-install-recommends \
+		autoconf \
+		automake \
+		bzip2 \
+		file \
+		g++ \
+		gcc \
+		imagemagick \
+		libbz2-dev \
+		libc6-dev \
+		libcurl4-openssl-dev \
+		libevent-dev \
+		libffi-dev \
+		libglib2.0-dev \
+		libjpeg-dev \
+		liblzma-dev \
+		libmagickcore-dev \
+		libmagickwand-dev \
+		libmysqlclient-dev \
+		libncurses-dev \
+		libpng-dev \
+		libpq-dev \
+		libreadline-dev \
+		libsqlite3-dev \
+		libssl-dev \
+		libtool \
+		libwebp-dev \
+		libxml2-dev \
+		libxslt-dev \
+		libyaml-dev \
+		make \
+		patch \
+		xz-utils \
+		zlib1g-dev \
+	&& rm -rf /var/lib/apt/lists/*
+```
+
+-	Created: Mon, 24 Aug 2015 16:11:35 GMT
+-	Parent Layer: `a0b6d62d8b494ada2b9a303ccf398021b2ca2838234f8d5f735743be77ab2726`
+-	Docker Version: 1.7.1
+-	Virtual Size: 313.7 MB (313666691 bytes)
+-	v2 Blob: `sha256:2ac01aa9d22a0c73405fe147734a6acf8929209620ca4a80fe8064449ab7d301`
+-	v2 Content-Length: 128.2 MB (128191020 bytes)
+-	v2 Last-Modified: Mon, 24 Aug 2015 16:55:37 GMT
+
+#### `1083021b835b0dadec581bfe5df60f68badcac3505882022874961469b57a86c`
+
+```dockerfile
+RUN apt-get purge -y python.*
+```
+
+-	Created: Mon, 24 Aug 2015 23:01:52 GMT
+-	Parent Layer: `8f45ce3be01ef6cf47621675c4a75cfdb5b951fb495b9c72394038ac2097c975`
+-	Docker Version: 1.7.1
+-	Virtual Size: 968.6 KB (968646 bytes)
+-	v2 Blob: `sha256:d52aa7328be73990218ff7667d78082a9a133bcb6a0147d012619ef419e61dea`
+-	v2 Content-Length: 219.3 KB (219345 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 02:17:33 GMT
+
+#### `daf97737baa6dfb8c2a9aa0b1b29382ffa0f4e83963cd0d343f35880a85e819e`
+
+```dockerfile
+ENV LANG=C.UTF-8
+```
+
+-	Created: Mon, 24 Aug 2015 23:01:53 GMT
+-	Parent Layer: `1083021b835b0dadec581bfe5df60f68badcac3505882022874961469b57a86c`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `d0db56467d6fa4177e047eccff20620dcbc1b078cc116b034844cc5d71f2ef3d`
+
+```dockerfile
+RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 97FC712E4C024BBEA48A61ED3A5CA953F73C700D
+```
+
+-	Created: Tue, 25 Aug 2015 00:08:45 GMT
+-	Parent Layer: `daf97737baa6dfb8c2a9aa0b1b29382ffa0f4e83963cd0d343f35880a85e819e`
+-	Docker Version: 1.7.1
+-	Virtual Size: 12.6 KB (12606 bytes)
+-	v2 Blob: `sha256:0eff4dba2813619cde95312133f5a9d313114d427afceba2fa42d43855c82274`
+-	v2 Content-Length: 6.7 KB (6739 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 03:02:44 GMT
+
+#### `3d972d281ba642548b4d823ed9a7f682b7a948f198ebe63a0b4d15a72b56f5b3`
+
+```dockerfile
+ENV PYTHON_VERSION=3.4.3
+```
+
+-	Created: Tue, 25 Aug 2015 00:08:46 GMT
+-	Parent Layer: `d0db56467d6fa4177e047eccff20620dcbc1b078cc116b034844cc5d71f2ef3d`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `11c3332417eaef0f1f72fa0a8b4c91fadbcaef6986f9d4ea29351ddfc8565867`
+
+```dockerfile
+ENV PYTHON_PIP_VERSION=7.1.2
+```
+
+-	Created: Tue, 25 Aug 2015 00:08:46 GMT
+-	Parent Layer: `3d972d281ba642548b4d823ed9a7f682b7a948f198ebe63a0b4d15a72b56f5b3`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `57b905b0cff8c61e420002921bc22a8a2022b6d6fc70ad2a995e39859399d778`
+
+```dockerfile
+RUN set -x \
+	&& mkdir -p /usr/src/python \
+	&& curl -SL "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz" -o python.tar.xz \
+	&& curl -SL "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz.asc" -o python.tar.xz.asc \
+	&& gpg --verify python.tar.xz.asc \
+	&& tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \
+	&& rm python.tar.xz* \
+	&& cd /usr/src/python \
+	&& ./configure --enable-shared --enable-unicode=ucs4 \
+	&& make -j$(nproc) \
+	&& make install \
+	&& ldconfig \
+	&& pip3 install --no-cache-dir --upgrade pip==$PYTHON_PIP_VERSION \
+	&& find /usr/local \
+		\( -type d -a -name test -o -name tests \) \
+		-o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
+		-exec rm -rf '{}' + \
+	&& rm -rf /usr/src/python
+```
+
+-	Created: Tue, 25 Aug 2015 00:12:02 GMT
+-	Parent Layer: `11c3332417eaef0f1f72fa0a8b4c91fadbcaef6986f9d4ea29351ddfc8565867`
+-	Docker Version: 1.7.1
+-	Virtual Size: 78.3 MB (78277634 bytes)
+-	v2 Blob: `sha256:8342e2e9b0e9b25d841853678ffdb88a1ed6d98e06410300b72a6c72d13f3b7e`
+-	v2 Content-Length: 22.1 MB (22061417 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 03:02:37 GMT
+
+#### `8ca1a8623b9648c90fbdcf7c1cb48b7096ecb5615e31915f0d7c633d45130f22`
+
+```dockerfile
+RUN cd /usr/local/bin \
+	&& ln -s easy_install-3.4 easy_install \
+	&& ln -s idle3 idle \
+	&& ln -s pydoc3 pydoc \
+	&& ln -s python3 python \
+	&& ln -s python-config3 python-config
+```
+
+-	Created: Tue, 25 Aug 2015 00:12:05 GMT
+-	Parent Layer: `57b905b0cff8c61e420002921bc22a8a2022b6d6fc70ad2a995e39859399d778`
+-	Docker Version: 1.7.1
+-	Virtual Size: 48.0 B
+-	v2 Blob: `sha256:aee2bb808b2392b0743842df644cb03594b3a34bf3020025c796e823814768f5`
+-	v2 Content-Length: 272.0 B
+-	v2 Last-Modified: Tue, 25 Aug 2015 03:02:16 GMT
+
+#### `615ff4d35e321826d4fc0e7fcd67c5e1175f3db3b81ed222e53074161bc5ced0`
+
+```dockerfile
+CMD ["python3"]
+```
+
+-	Created: Tue, 25 Aug 2015 00:12:06 GMT
+-	Parent Layer: `8ca1a8623b9648c90fbdcf7c1cb48b7096ecb5615e31915f0d7c633d45130f22`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `957c00090d1aa9548a6cada8437dad11f2c446c166d0b15f82cf29a60255b022`
+
+```dockerfile
+MAINTAINER Paul R. Tagliamonte <[email protected]>
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:10 GMT
+-	Parent Layer: `615ff4d35e321826d4fc0e7fcd67c5e1175f3db3b81ed222e53074161bc5ced0`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `bf030dfcd019c70fc8b6472baabaffdad0396b52809c2297df4789c522e27540`
+
+```dockerfile
+ADD dir:954f76c7f237c7e873eb4ea2eb4ca712396e2ddb2b6a9b4f7f369aaf4831ab0e in /opt/hylang/hy
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:11 GMT
+-	Parent Layer: `957c00090d1aa9548a6cada8437dad11f2c446c166d0b15f82cf29a60255b022`
+-	Docker Version: 1.7.1
+-	Virtual Size: 748.7 KB (748714 bytes)
+-	v2 Blob: `sha256:882920b8f584d6489fd0bc3d8fd447da239267f68a9ad3358675a36db2296785`
+-	v2 Content-Length: 359.2 KB (359203 bytes)
+-	v2 Last-Modified: Wed, 26 Aug 2015 22:39:41 GMT
+
+#### `52da90e29440eb025e2258836b786281486cef006ff034ba91c4b41ef429d433`
+
+```dockerfile
+RUN pip3 install -e /opt/hylang/hy
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:16 GMT
+-	Parent Layer: `bf030dfcd019c70fc8b6472baabaffdad0396b52809c2297df4789c522e27540`
+-	Docker Version: 1.7.1
+-	Virtual Size: 5.4 MB (5363304 bytes)
+-	v2 Blob: `sha256:4633c7bd1cb4a412ffc78eaa9295fc8815e366a952e6c1219a2dc39aaaf02586`
+-	v2 Content-Length: 2.1 MB (2081136 bytes)
+-	v2 Last-Modified: Wed, 26 Aug 2015 22:39:38 GMT
+
+#### `599d9e646932f023dca41418741578db90eb98462a044e81348b2373ca184c29`
+
+```dockerfile
+CMD ["hy"]
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:16 GMT
+-	Parent Layer: `52da90e29440eb025e2258836b786281486cef006ff034ba91c4b41ef429d433`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+## `hylang:0.11.0`
+
+-	Total Virtual Size: 690.9 MB (690887026 bytes)
+-	Total v2 Content-Length: 265.2 MB (265166696 bytes)
+
+### Layers (17)
+
+#### `2c49f83e0b13f73bf3d276c9fe26ba9aa94d2a1614e866642b95cb0245d0cdab`
+
+```dockerfile
+ADD file:b770303e11edaa0ad0d8f43f6db4fa26673923912b5d5f7cb748ba025e6c4d3b in /
+```
+
+-	Created: Thu, 20 Aug 2015 20:17:59 GMT
+-	Docker Version: 1.7.1
+-	Virtual Size: 125.2 MB (125174904 bytes)
+-	v2 Blob: `sha256:7ccc78f8af6db23a5013f7b90b5672b82d69dd2fb30d1e6736dba29209aceee7`
+-	v2 Content-Length: 51.4 MB (51368377 bytes)
+-	v2 Last-Modified: Thu, 20 Aug 2015 20:40:09 GMT
+
+#### `4a5e6db8c0693a16de88b7559ded7c1cb804018571b137e13abb1713ce6a71cf`
+
+```dockerfile
+CMD ["/bin/bash"]
+```
+
+-	Created: Thu, 20 Aug 2015 20:18:01 GMT
+-	Parent Layer: `2c49f83e0b13f73bf3d276c9fe26ba9aa94d2a1614e866642b95cb0245d0cdab`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `f972ade4c9d5f9863b782ee685c8ec80da9bdb8e43834919214dd68d501687f0`
+
+```dockerfile
+RUN apt-get update && apt-get install -y --no-install-recommends \
+		ca-certificates \
+		curl \
+		wget \
+	&& rm -rf /var/lib/apt/lists/*
+```
+
+-	Created: Thu, 20 Aug 2015 20:24:45 GMT
+-	Parent Layer: `4a5e6db8c0693a16de88b7559ded7c1cb804018571b137e13abb1713ce6a71cf`
+-	Docker Version: 1.7.1
+-	Virtual Size: 44.4 MB (44355942 bytes)
+-	v2 Blob: `sha256:29f19d8b362b32c34e142a0959111d215d43805f3d4242bde1359770a5d69284`
+-	v2 Content-Length: 18.5 MB (18538913 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 22:15:11 GMT
+
+#### `a0b6d62d8b494ada2b9a303ccf398021b2ca2838234f8d5f735743be77ab2726`
+
+```dockerfile
+RUN apt-get update && apt-get install -y --no-install-recommends \
+		bzr \
+		git \
+		mercurial \
+		openssh-client \
+		subversion \
+	&& rm -rf /var/lib/apt/lists/*
+```
+
+-	Created: Thu, 20 Aug 2015 20:25:45 GMT
+-	Parent Layer: `f972ade4c9d5f9863b782ee685c8ec80da9bdb8e43834919214dd68d501687f0`
+-	Docker Version: 1.7.1
+-	Virtual Size: 122.3 MB (122318537 bytes)
+-	v2 Blob: `sha256:a068cb6fd68bb10bf1f97beedee2837c2b2a52109dbbb59ea25462d661006e0d`
+-	v2 Content-Length: 42.3 MB (42340018 bytes)
+-	v2 Last-Modified: Thu, 20 Aug 2015 20:59:13 GMT
+
+#### `8f45ce3be01ef6cf47621675c4a75cfdb5b951fb495b9c72394038ac2097c975`
+
+```dockerfile
+RUN apt-get update && apt-get install -y --no-install-recommends \
+		autoconf \
+		automake \
+		bzip2 \
+		file \
+		g++ \
+		gcc \
+		imagemagick \
+		libbz2-dev \
+		libc6-dev \
+		libcurl4-openssl-dev \
+		libevent-dev \
+		libffi-dev \
+		libglib2.0-dev \
+		libjpeg-dev \
+		liblzma-dev \
+		libmagickcore-dev \
+		libmagickwand-dev \
+		libmysqlclient-dev \
+		libncurses-dev \
+		libpng-dev \
+		libpq-dev \
+		libreadline-dev \
+		libsqlite3-dev \
+		libssl-dev \
+		libtool \
+		libwebp-dev \
+		libxml2-dev \
+		libxslt-dev \
+		libyaml-dev \
+		make \
+		patch \
+		xz-utils \
+		zlib1g-dev \
+	&& rm -rf /var/lib/apt/lists/*
+```
+
+-	Created: Mon, 24 Aug 2015 16:11:35 GMT
+-	Parent Layer: `a0b6d62d8b494ada2b9a303ccf398021b2ca2838234f8d5f735743be77ab2726`
+-	Docker Version: 1.7.1
+-	Virtual Size: 313.7 MB (313666691 bytes)
+-	v2 Blob: `sha256:2ac01aa9d22a0c73405fe147734a6acf8929209620ca4a80fe8064449ab7d301`
+-	v2 Content-Length: 128.2 MB (128191020 bytes)
+-	v2 Last-Modified: Mon, 24 Aug 2015 16:55:37 GMT
+
+#### `1083021b835b0dadec581bfe5df60f68badcac3505882022874961469b57a86c`
+
+```dockerfile
+RUN apt-get purge -y python.*
+```
+
+-	Created: Mon, 24 Aug 2015 23:01:52 GMT
+-	Parent Layer: `8f45ce3be01ef6cf47621675c4a75cfdb5b951fb495b9c72394038ac2097c975`
+-	Docker Version: 1.7.1
+-	Virtual Size: 968.6 KB (968646 bytes)
+-	v2 Blob: `sha256:d52aa7328be73990218ff7667d78082a9a133bcb6a0147d012619ef419e61dea`
+-	v2 Content-Length: 219.3 KB (219345 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 02:17:33 GMT
+
+#### `daf97737baa6dfb8c2a9aa0b1b29382ffa0f4e83963cd0d343f35880a85e819e`
+
+```dockerfile
+ENV LANG=C.UTF-8
+```
+
+-	Created: Mon, 24 Aug 2015 23:01:53 GMT
+-	Parent Layer: `1083021b835b0dadec581bfe5df60f68badcac3505882022874961469b57a86c`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `d0db56467d6fa4177e047eccff20620dcbc1b078cc116b034844cc5d71f2ef3d`
+
+```dockerfile
+RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 97FC712E4C024BBEA48A61ED3A5CA953F73C700D
+```
+
+-	Created: Tue, 25 Aug 2015 00:08:45 GMT
+-	Parent Layer: `daf97737baa6dfb8c2a9aa0b1b29382ffa0f4e83963cd0d343f35880a85e819e`
+-	Docker Version: 1.7.1
+-	Virtual Size: 12.6 KB (12606 bytes)
+-	v2 Blob: `sha256:0eff4dba2813619cde95312133f5a9d313114d427afceba2fa42d43855c82274`
+-	v2 Content-Length: 6.7 KB (6739 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 03:02:44 GMT
+
+#### `3d972d281ba642548b4d823ed9a7f682b7a948f198ebe63a0b4d15a72b56f5b3`
+
+```dockerfile
+ENV PYTHON_VERSION=3.4.3
+```
+
+-	Created: Tue, 25 Aug 2015 00:08:46 GMT
+-	Parent Layer: `d0db56467d6fa4177e047eccff20620dcbc1b078cc116b034844cc5d71f2ef3d`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `11c3332417eaef0f1f72fa0a8b4c91fadbcaef6986f9d4ea29351ddfc8565867`
+
+```dockerfile
+ENV PYTHON_PIP_VERSION=7.1.2
+```
+
+-	Created: Tue, 25 Aug 2015 00:08:46 GMT
+-	Parent Layer: `3d972d281ba642548b4d823ed9a7f682b7a948f198ebe63a0b4d15a72b56f5b3`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `57b905b0cff8c61e420002921bc22a8a2022b6d6fc70ad2a995e39859399d778`
+
+```dockerfile
+RUN set -x \
+	&& mkdir -p /usr/src/python \
+	&& curl -SL "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz" -o python.tar.xz \
+	&& curl -SL "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz.asc" -o python.tar.xz.asc \
+	&& gpg --verify python.tar.xz.asc \
+	&& tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \
+	&& rm python.tar.xz* \
+	&& cd /usr/src/python \
+	&& ./configure --enable-shared --enable-unicode=ucs4 \
+	&& make -j$(nproc) \
+	&& make install \
+	&& ldconfig \
+	&& pip3 install --no-cache-dir --upgrade pip==$PYTHON_PIP_VERSION \
+	&& find /usr/local \
+		\( -type d -a -name test -o -name tests \) \
+		-o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
+		-exec rm -rf '{}' + \
+	&& rm -rf /usr/src/python
+```
+
+-	Created: Tue, 25 Aug 2015 00:12:02 GMT
+-	Parent Layer: `11c3332417eaef0f1f72fa0a8b4c91fadbcaef6986f9d4ea29351ddfc8565867`
+-	Docker Version: 1.7.1
+-	Virtual Size: 78.3 MB (78277634 bytes)
+-	v2 Blob: `sha256:8342e2e9b0e9b25d841853678ffdb88a1ed6d98e06410300b72a6c72d13f3b7e`
+-	v2 Content-Length: 22.1 MB (22061417 bytes)
+-	v2 Last-Modified: Tue, 25 Aug 2015 03:02:37 GMT
+
+#### `8ca1a8623b9648c90fbdcf7c1cb48b7096ecb5615e31915f0d7c633d45130f22`
+
+```dockerfile
+RUN cd /usr/local/bin \
+	&& ln -s easy_install-3.4 easy_install \
+	&& ln -s idle3 idle \
+	&& ln -s pydoc3 pydoc \
+	&& ln -s python3 python \
+	&& ln -s python-config3 python-config
+```
+
+-	Created: Tue, 25 Aug 2015 00:12:05 GMT
+-	Parent Layer: `57b905b0cff8c61e420002921bc22a8a2022b6d6fc70ad2a995e39859399d778`
+-	Docker Version: 1.7.1
+-	Virtual Size: 48.0 B
+-	v2 Blob: `sha256:aee2bb808b2392b0743842df644cb03594b3a34bf3020025c796e823814768f5`
+-	v2 Content-Length: 272.0 B
+-	v2 Last-Modified: Tue, 25 Aug 2015 03:02:16 GMT
+
+#### `615ff4d35e321826d4fc0e7fcd67c5e1175f3db3b81ed222e53074161bc5ced0`
+
+```dockerfile
+CMD ["python3"]
+```
+
+-	Created: Tue, 25 Aug 2015 00:12:06 GMT
+-	Parent Layer: `8ca1a8623b9648c90fbdcf7c1cb48b7096ecb5615e31915f0d7c633d45130f22`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `957c00090d1aa9548a6cada8437dad11f2c446c166d0b15f82cf29a60255b022`
+
+```dockerfile
+MAINTAINER Paul R. Tagliamonte <[email protected]>
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:10 GMT
+-	Parent Layer: `615ff4d35e321826d4fc0e7fcd67c5e1175f3db3b81ed222e53074161bc5ced0`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT
+
+#### `bf030dfcd019c70fc8b6472baabaffdad0396b52809c2297df4789c522e27540`
+
+```dockerfile
+ADD dir:954f76c7f237c7e873eb4ea2eb4ca712396e2ddb2b6a9b4f7f369aaf4831ab0e in /opt/hylang/hy
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:11 GMT
+-	Parent Layer: `957c00090d1aa9548a6cada8437dad11f2c446c166d0b15f82cf29a60255b022`
+-	Docker Version: 1.7.1
+-	Virtual Size: 748.7 KB (748714 bytes)
+-	v2 Blob: `sha256:882920b8f584d6489fd0bc3d8fd447da239267f68a9ad3358675a36db2296785`
+-	v2 Content-Length: 359.2 KB (359203 bytes)
+-	v2 Last-Modified: Wed, 26 Aug 2015 22:39:41 GMT
+
+#### `52da90e29440eb025e2258836b786281486cef006ff034ba91c4b41ef429d433`
+
+```dockerfile
+RUN pip3 install -e /opt/hylang/hy
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:16 GMT
+-	Parent Layer: `bf030dfcd019c70fc8b6472baabaffdad0396b52809c2297df4789c522e27540`
+-	Docker Version: 1.7.1
+-	Virtual Size: 5.4 MB (5363304 bytes)
+-	v2 Blob: `sha256:4633c7bd1cb4a412ffc78eaa9295fc8815e366a952e6c1219a2dc39aaaf02586`
+-	v2 Content-Length: 2.1 MB (2081136 bytes)
+-	v2 Last-Modified: Wed, 26 Aug 2015 22:39:38 GMT
+
+#### `599d9e646932f023dca41418741578db90eb98462a044e81348b2373ca184c29`
+
+```dockerfile
+CMD ["hy"]
+```
+
+-	Created: Wed, 26 Aug 2015 03:19:16 GMT
+-	Parent Layer: `52da90e29440eb025e2258836b786281486cef006ff034ba91c4b41ef429d433`
+-	Docker Version: 1.7.1
+-	Virtual Size: 0.0 B
+-	v2 Blob: `sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4`
+-	v2 Content-Length: 32.0 B
+-	v2 Last-Modified: Fri, 27 Mar 2015 17:18:47 GMT

+ 21 - 2
update-tag-details.sh

@@ -4,18 +4,37 @@ set -eo pipefail
 cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
 helperDir='.template-helpers'
 
+# going for "bashbrew: command not found"
+bashbrew --help > /dev/null
+
+docker build -t docker-library-docs .
+
 repos=( "$@" )
 if [ ${#repos[@]} -eq 0 ]; then
 	repos=( */ )
 fi
 repos=( "${repos[@]%/}" )
 
+script="$helperDir/generate-tag-details.pl"
 for repo in "${repos[@]}"; do
 	echo -n "$repo ... "
 	{
-		echo "<!-- THIS FILE IS GENERATED BY '$helperDir/generate-tag-details.sh' -->"
+		IFS=$'\n'
+		tags=( $(bashbrew list "$repo") )
+		unset IFS
+		echo "<!-- THIS FILE IS GENERATED VIA '$script' -->"
+		echo
+		echo "# Tags of \`$repo\`"
 		echo
-		"$helperDir/generate-tag-details.sh" "$repo"
+		# add a simple ToC
+		for tag in "${tags[@]}"; do
+			# GitHub heading anchors are strange
+			href="${tag//./}"
+			href="${href//:/}"
+			href="#${href,,}"
+			echo $'-\t[`'"$tag"'`]('"$href"')'
+		done
+		docker run -i --rm -v "$PWD":/wtf:ro -w /wtf --entrypoint "$script" docker-library-docs "${tags[@]}"
 	} > "$repo/tag-details.md"
 	echo 'done'
 done